冒泡排序算法是个入门的排序算法,可能是很多人接触过的第一个排序算法,算法本身很简单,主要步骤如下:1、从前到后遍历数组,依次比较当前元素和下一个元素。如果当前元素大于下一个元素,则对调当前元素和下一个元素;如果当前元素不大于下一个元素,什么也不用做,继续遍历下一个元素。这样经过一轮遍历后,最大的元素就排到了数组的尾部,找到了最大的元素。2、重复第一步,依次找到第二大、第三大等元素等等,并放到适当的位置。 算法的动图(网上找的)演示如下: 冒泡排序动图演示 常规排序代码如下:intarr〔〕{2,4,0,5,7,1,3,8,9};intlensizeof(arr)sizeof(arr〔0〕);while(max0){for(inti0;imax1;i){if(arr〔i〕arr〔i1〕){inttemparr〔i〕;arr〔i〕arr〔i1〕;arr〔i1〕}}} 接下来说下可以优化的点,如果这个数组的前部分本身就是有序的,只是后面一部分元素是乱序的,其实本必要做完所有轮次的排序,可以提早结束遍历,提高程序性能。提高结束遍历的条件是:如果某轮排序结束后,在本轮排序中,没有需要发生元素顺序的调换,那么就可以认为当前的数组中,所有元素都是有序的了,可以退出遍历。 优化后的代码为:intarr〔〕{2,4,0,5,7,1,3,8,9};intlensizeof(arr)sizeof(arr〔0〕);while(max0){intreplace0;for(inti0;imax1;i){if(arr〔i〕arr〔i1〕){inttemparr〔i〕;arr〔i〕arr〔i1〕;arr〔i1〕}}if(replace0){}} 以程序的测试数据为例,优化前,循环次数为36次,优化后,循环次数减少到30次,减少6次,减少16。67的循环次数。如果数组乱序程度不是很大的情况下,减少的幅度应该是比较可观的。 优化前冒泡排序过程 优化后冒泡排序过程