现在的位置: 首页 > 综合 > 正文

【算法-排序之一】冒泡排序

2019年06月07日 ⁄ 综合 ⁄ 共 882字 ⁄ 字号 评论关闭

算法-排序之冒泡排序

      
         如果数据按照一定的顺序进行排序,数据处理的效率将显著的提高。算法是编程的精髓,一个高效而合适的算法能极大的减少时间消耗与空间消耗,提到“合适”是因为没有哪个算法可以在所有情况下都表现出色,同样是排序,在不同数据规模下各种排序算法有不同的效能表现,选择合适的解决算法的才能最大限度地提高效率。
         1.冒泡算法BubbleSort是常用排序算法之一,它的核心是让大(或小)的数据像水泡一样冒到最上端,这是通过不断地比较两个相邻数据的大小,前者大于后者则交换位置来实现冒泡。
          如下示例:
          

          图解如下:
                                            排序一遍后变成
  
                                     依次类推,效果犹如把最大数“冒”上去。

            需要注意的细节是,对于n个数据,只需要排n-1次,故控制排序遍数的i起始值为1而不是0.在每次排序中,上次排好的数不需要再进行比较,故控制每次排序结束位置变了j的上限是num-i,随着排序次数i增加,需要排序的位置越靠前。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
void BubbleSort(int Array[],int num){
int i; //i控制排序的遍数
int j; //j控制每次排序结束的位置
int temp;
for(i=0;i<num;i++){
for(j=1;j<num-i;j++){
if(Array[j-1]>Array[j]){
temp=Array[j-1];
Array[j-1]=Array[j];
Array[j]=temp;
}
}
}
}
 来自CODE的代码片

BuBBleSort.c

 

              2. 时间复杂度

           冒泡排序的主要时间消耗是比较,第一趟序比较n-1次,随后依次递减n-2....1,则总比较(n-1)+(n-2)+...+3+2+1=(n*2-n)/2,故其时间复杂度为O(n^2).
           3.空间复杂度
           整个排序过程需要一个temp的空间用于交换数据,故为空间复杂度为O(1).
           
【上篇】
【下篇】

抱歉!评论已关闭.