直接插入排序 - 时间复杂度O(n^2)
将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序
void main(){
int a[10] = {77,100,99,22,11,44,33,66,55,88};
print(a,sizeof(a) / sizeof(int));
cout<<"\n";
}
void insertSort(int a[],int length){
int temp = 0;//临时变量 用于交换数据
for(int i=1;i<length;i++){
for(int j=0;j<i;j++){
if(a[i]<a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
希尔排序
不稳定 平均时间 O(n^1.3) 最坏时间O(n^2)
先取一个小于n的整数的d1作为第一个增量,把数组的全部记录分成的呢d1个分组。所有距离为的的倍数的记录放在同一 个组中,先各组中进行直接插入排序,然后取第二个增量d2<d1重复上述的分组和排序,直到所取的增量dt=1,即所有的记录都在同一组中进行直接插入排序,这是一种分组插入方法.
一般d1 = n/2 d2 = d1/2
void shellSort(int a[],int length){
int d = length/2;
int temp = 0;//临时变量 用于交换数据
while(d>0){
//直接插入排序_间隙变化
for(int i=d;i<length;i++){
for(int j=0;j<i;j=j+d){
if(a[i]<a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
d = d/2;//间隙
}
}