冒泡排序是从我学C数组的时候最大的头疼点,那时候for的二层循环的概念没有那么成熟。现在对冒泡排序没有那么恐惧了,多练,多用,没啥好怕的。
我们当然可以一口气将这四个数字从小到大来排序,但计算机需要一个一个的去比。那么怎么比呢?就需要用到排序算法了,排序的算法很多,这次的文章主要介绍冒泡排序。
冒泡排序简介:顾名思义,‘冒泡’,在水中的泡泡,轻的飘上去,重的沉在水里。
拿9 5 7 1 这四个数字作为例子
第一轮:
9 5 7 1
5 9 7 1
5 7 9 1
5 7 1 9
第一轮比较下来,发现最大的数字跑到了最后面。在程序中可以用一个for循环来遍历这四个数字如果前一个比后一个大,则对其进行交换。
第二轮:
5 7 1 9
5 1 7 9 (其实到这里可以不用比了)
5 1 7 9
5 1 7 9
第二轮将7放到了9的前面。同样的道理,前后比较大的放后面。
第三轮
5 1 7 9
1 5 7 9 (应停止比较)
1 5 7 9
1 5 7 9
第三轮将5放在了7的前面
虽然有四个数字,但只需遍历三次,因为其他三个数字确定放正确了,最后一个数字自然也就正确了。
#define N 4int array[N] = { 9,5,7,1};for (int i = 0; i < N-1; i++){ for (int j = 0; j < N-1-i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1 ]; array[j + 1] = temp; } }}for (int i = 0; i < N; i++){ printf("%d\n", array[i]);}
关键点在于外层循环的N-1,上文已经解释是因为其他的位置已经确定最后一个数字不需要管。
内层循环,首先N-1,是因为不用与自己比,N-1-i ,这里又减了一个i,原因是外层每循环一次就能确定一个数字,所以每次减去一次外层。再对其进行大小比较,交换数据。