冒泡排序算法:轻者上浮,重者下沉。(或者正好相反)
基本思想:
1.比较相邻的元素。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
本质上是:第一趟,选出最大(或最小)元素,第二趟,选出次大(或次小的)的元素…..
示例:
定义数组:{ 4, 2, 62, 9, 22, 1,14,10 }
第1趟排序后:[2, 4, 9, 22, 1, 14, 10, 62] //选取最大元素62,放在了最后
第2趟排序后:[2, 4, 9, 1, 14, 10, 22, 62] //选出了次大元素22 ,放在了倒数第二位….
第3趟排序后:[2, 4, 1, 9, 10, 14, 22, 62]
第4趟排序后:[2, 1, 4, 9, 10, 14, 22, 62]
第5趟排序后:[1, 2, 4, 9, 10, 14, 22, 62]
第6趟排序后:[1, 2, 4, 9, 10, 14, 22, 62]
第7趟排序后:[1, 2, 4, 9, 10, 14, 22, 62]
代码:
int i,j,t; int [] a={4,2,6,9,22,1,100}; for( i=0;i<n-1;i++){ for( j=0;j<n-i-1;j++){ //注意这两个for循环是怎么写的。 if(a[j]>a[j+1]){ //满足条件的话,交换两个元素。 t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } }
时间复杂度:最好情况,O(n) ;最坏(逆序) O(n*n)。是稳定的排序。
(稳定排序:待排序的记录序列中可能存在两个或两个以上关键字相等的记录。
排序前的序列中Ri领先于Rj(即i<j).若在排序后的序列中Ri仍然领先于Rj,则称所用的方法是稳定的。)
来源:https://www.cnblogs.com/xiaoChongUp/p/3238788.html