-
插入类排序
-
直接插入排序
将一个无序序列从第一个开始插入到一个有序序列(或者说插入到这个无序序列的前面)。即:将a[1]位置不变,a[2]与a[1]比较,若小于a[1],则插入到a[1]前方,a[1]往后放。再将a[3]与a[1]a[2]比较,插入到合适地方,被后面插入元素取代的元素往后移动,以此类推。
待排序记录 R1,R2,… ,Rn–1, Rn
第一步:R1
第二步:(R1 ), R2
第三步:(R1 , R2), R3
……
第 j 步:(R1,R2,… ,Rj–1), Rj
……
第 n 步: (R1,R2,… ,Rn–1), Rn.
例:j=5
原有序表中关键词比Rj大的记录数:dj
比较次数:dj+1 移动次数: dj+2
特点:时间复杂度O(n^2),空间复杂度O(1)
#include<stdio.h>
void insert_sort(int a[],int n)
{
int i=0,j=0,temp=0;
for(i=1;i<n;i++){
temp=a[i];
for(j=i-1;j>0;j--){
if(temp<a[j]){
a[j+1]=a[j];
a[j]=temp;
}
}
}
}
void print_array(int a[] ,int len)
{
for(int i=0;i<len;i++)
{
printf("%d",a[i]);
printf("\n");
}
}
int main(){
int a[]={1,3,5,9,8,6,4,2,7} ;
printf("before sort:\n");
print_array(a,9);
insert_sort(a,9);
printf("after sort:\n");
print_array(a,9);
return 0;
}
-
希尔排序
TODO