初等排序1
作者:互联网
目录
初等排序1
一.三种初等排序算法
1.插入排序法
插入排序法:从左到右对数据进行排序,将待排序的数据插入前面已经排序的数据的合适位置,直到插入最后一个数据。
插入排序法的算法如下:
for(i=1;i<n;i++){
x=a[i];
j=i-1;
while(j>=0&&a[j]>x){
a[j+1]=a[j];
j--;
}
a[j+1]=x;
}
在最坏的情况下,第i次循环需要进行i次移动,插入排序法一共要要进行次移动,因为相对于来说很小,再省略常熟,所以该算法的复杂度为O()。
如果输入的数据本身就是按照升序或降序排列,该算法只需进行i次不需要移动的循环。
综上,插入排序法适用于相对有序的数据。
2.冒泡排序法
冒泡排序法:顾名思义,冒泡排序法就是让数组元素像水中的气泡一样逐渐上浮,进而达到排序的目的。
冒泡排序法的算法如下:
while(flag){
flag=0;
for(j=n-1;j>i;j--){
if(a[j]<a[j-1]){
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
flag=1;
}
}
i++;
}
冒泡排序法再最坏的情况下,也要进行次移动,所以算法的复杂度也为O()。
同时,算法移动的次数也为这组数据的反序数或逆序数,可以体现数组的错乱程度。
3.选择排序法
选择排序法:在每一次循环中找到最小值,放到已经排好序的数据之后。
选择排序法的算法如下:
for(i=0;i<n;i++){
min=i;
for(j=i;j<n;j++){
if(a[min]>a[j]){
min=j;
}
}
t=a[i];
a[i]=a[min];
a[min]=t;
}
无论什么情况,选择排序法都要进行次比较运算,因此算法复杂度同样为O()。
但是选择排序法是不稳定的排序算法。
二.稳定排序
稳定排序:当数据中存在2个或2个以上键值相等的元素时,这些元素在排序前后顺序不变。
上面的插入排序法和冒泡排序法为稳定的排序算法,而选择排序法为不稳定的排序算法。
用如下的笨方法可以检查排序结果是否稳定:
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
for(a=0;a<n;a++){
for(b=a+1;b<n;b++){
if(in[i]的数字==in[j]的数字&&in[i]==out[b]&&in[j]==out[a]){
return false;
}
}
}
}
}
return true;
此方法的复杂度为O(),在n比较大时效率比较低,不方便。
因为冒泡排序法和插入排序法属于稳定的排序算法,所以将选择排序法的结果和二者进行比较,就能知道结果是否稳定,此复杂度为O(n)。
三.总结1
虽然三种初等排序方法的最坏复杂度均为O(),但适用于不同的数据下。
冒泡排序法与选择排序法相比,一个是从局部入手减少逆序元素,一个是从大局逐个选择最小元素。
另外,冒泡排序法和选择排序法比较运算的次数不受输入的数据的影响,而插入排序法受数据影响,处理一些特殊的数据时效率更高。
读《挑战程序设计竞赛》第二天 (侵删) 2021.2.20
标签:数据,复杂度,冒泡排序,算法,排序,初等,插入排序 来源: https://blog.csdn.net/weixin_51302676/article/details/113891635