常见算法之0---冒泡排序

独自空忆成欢 提交于 2020-01-31 00:14:15

冒泡排序算法:轻者上浮,重者下沉。(或者正好相反) 

基本思想:

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,则称所用的方法是稳定的。)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!