面试官爱问的10大经典排序算法,20 张图来搞定
时间:2021-08-19 16:25:07
手机看文章
扫描二维码
随时随地手机看文章
[导读]冒泡排序简介冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序。复杂度与稳定性思路原理以顺序为例从第一个元素开始一个一个的比较相邻的元素,如果第一个比第二个大即a[1]>a[2],就彼此交换。从...
冒泡排序
简介
冒泡排序是因为越小的元素会经由交换以升序或降序的方式慢慢浮
到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名冒泡排序。复杂度与稳定性
思路原理
以顺序为例- 从第一个元素开始一个一个的比较相邻的元素,如果第一个比第二个大即
a[1]>a[2]
,就彼此交换。 - 从第一对到最后一对,对每一对相邻元素做一样的操作。此时在最后的元素应该会是最大的数,我们也称呼
一遍这样的操作
为一趟冒泡排序。 - 针对所有的元素重复以上的步骤,每一趟得到的最大值已放在最后,下一次操作则不需要将此最大值纳入计算。
- 持续对每次对越来越少的元素,重复上面的步骤。
- 直到所有的数字都比较完成符合
a[i],即完成冒泡排序。
图示过程
以数组数据{ 70,50,30,20,10,70,40,60}为例:如图,每一次排序把一个最大的数被放在了最后,然后按照这个趋势逐渐往前,直到按从小到大的顺序依次排序。到了第4轮的时候,整个数据已经排序结束了,但此时程序仍然在进行。直到第5,6,7轮程序才算真正的结束,这其实是一种浪费算力的表现。主要代码实现
void bubble_sort(int a[],int n) {
for(int i=0; i for(int j=0; j if(a[j]>a[j 1]) {
swap(a[j],a[j 1]); //交换数据
}
}
}
}
注意,由于C 的namespace std
命名空间的使用,std自带了交换函数swap(a,b)
,可以直接使用,其功能是交换a与b的两个值,当然你可以自定义swap函数,其模板代码为:template //模板类,可以让参数为任意类型
void swap(T