宁波网站商城建设,软件专业,wordpress链接在哪里,网站 数据库模板http://blog.csdn.net/morewindows/article/details/6657829 冒泡排序是非常容易理解和实现#xff0c;#xff0c;以从小到大排序举例#xff1a; 设数组长度为N。 1#xff0e;比较相邻的前后二个数据#xff0c;如果前面数据大于后面的数据#xff0c;就将二个数据交…http://blog.csdn.net/morewindows/article/details/6657829 冒泡排序是非常容易理解和实现以从小到大排序举例 设数组长度为N。 1比较相邻的前后二个数据如果前面数据大于后面的数据就将二个数据交换。 2这样对数组的第0个数据到N-1个数据进行一次遍历后最大的一个数据就“沉”到数组第N-1个位置。 3NN-1如果N不为0就重复前面二步否则排序完成。 按照定义很容易写出代码 [cpp] view plain copy //冒泡排序1 void BubbleSort1(int a[], int n) { int i, j; for (i 0; i n; i) for (j 1; j n - i; j) if (a[j - 1] a[j]) Swap(a[j - 1], a[j]); } 下面对其进行优化设置一个标志如果这一趟发生了交换则为true否则为false。明显如果有一趟没有发生交换说明排序已经完成。 [cpp] view plain copy [cpp] view plain copy //冒泡排序2 void BubbleSort2(int a[], int n) { int j, k; bool flag; k n; flag true; while (flag) { flag false; for (j 1; j k; j) if (a[j - 1] a[j]) { Swap(a[j - 1], a[j]); flag true; } k--; } } 再做进一步的优化。如果有100个数的数组仅前面10个无序后面90个都已排好序且都大于前面10个数字那么在第一趟遍历后最后发生交换的位置必定小于10且这个位置之后的数据必定已经有序了记录下这位置第二次只要从数组头部遍历到这个位置就可以了。 [cpp] view plain copy //冒泡排序3 void BubbleSort3(int a[], int n) { int j, k; int flag; flag n; while (flag 0) { k flag; flag 0; for (j 1; j k; j) if (a[j - 1] a[j]) { Swap(a[j - 1], a[j]); flag j; } } } 冒泡排序毕竟是一种效率低下的排序方法在数据规模很小时可以采用。数据规模比较大时最好用其它排序方法。 转载于:https://www.cnblogs.com/android-blogs/p/6344031.html