冒泡排序是针对少许待排数据的一种有效的排序算法,其思想是很是容易理解的:假设待排的数组长度为N算法
比较先后相邻的两个数,若是前面数据大于后面数据,则进行交换数组
将数据进行N-1次比较后,最大的数据就会浮到数组的最后code
将N=N-1,重复以上的步骤排序
代码实现为:博客
int bubbleSort_1(int *arr, int len) { int i,j; for (i=0; i<len-1; i++) for (j=0; j<len-1-i; j++) if (arr[j] > arr[j+1]) swap(arr[j], arr[j+1]); return 0; }
后来想到这种算法貌似有改进的地方,并且在CSDN的博客上看到确实有改进的地方。好比:5 1 2 3 4 这个数组,在进行第一趟排序后,数组为1 2 3 4 5,第二趟排序不进行任何交换操做,这说明该排序已是升序,那么能够终止第3趟、第4趟排序。这里只需设置一个flag标签,判断第k次是否进行交换,若是没有则跳出循环,其代码以下:class
int bubbleSort_2(int *arr, int len) { int i,j; bool flag = false; for (i=0; i<len-1; i++) { flag = false; for (j=0; j<len-1-i; j++) if (arr[j] > arr[j+1]) { swap(arr[j], arr[j+1]); flag = true; } if (!flag) break; } return 0; }