排序算法之冒泡排序

冒泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法。它重复地走访过要排序的元素,一次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的运作如下:

比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

分类--------------内部比较排序

数据结构----------数组

最差时间复杂度---- O(n^2)

最优时间复杂度----如果能在内部循环第一次运行时,使用一个旗标来表示有无需要交换的可能,可以把最优时间复杂度降低到O(n)

平均时间复杂度---- O(n^2)

所需辅助空间------ O(1)

稳定性------------稳定

#include

usingnamespacestd;

voidexchange(intA[],inti,intj)//交换A[i]和A[j]

{

inttemp = A[i];

A[i] = A[j];

A[j] = temp;

}

intmain()

{

intA[] = {6,5,3,1,8,7,2,4};//从小到大冒泡排序

intn =sizeof(A) /sizeof(int);

for(intj =0; j < n -1; j++)//每次最大元素就像气泡一样"浮"到数组的最后

{

for(inti =0; i < n -1- j; i++)//依次比较相邻的两个元素,使较大的那个向后移

{

if(A[i] > A[i +1])//如果条件改成A[i] >= A[i + 1],则变为不稳定的排序算法

{

exchange(A, i, i +1);

}

}

}

printf("冒泡排序结果:");

for(inti =0; i < n; i++)

{

printf("%d ", A[i]);

}

printf("\n");

return0;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,287评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 3,807评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,327评论 0 2
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,486评论 0 1
  • 我趿拉着一双人字拖,从沙滩裤的裤兜里摸出一张二十块钱纸币来,四处张望一圈,还是走进了最常去的那家卖卤肉饭很出名的店...
    DoctorBlind阅读 333评论 0 0

友情链接更多精彩内容