插入排序:
插入排序的分类:
直接插入排序
希尔排序
1.直接插入排序:
思想:
插入排序在执行的过程中就像我们平时玩扑克牌一样,把待排序的数值依次插入到已经排好序的数据中,直到所有的数据都插入数据完成为止;
void InsertSort(int array[],int size){
for(int i=1;i<size;++i){
int key=array[i];
int end=i-1;
while(end>=0 && array[end]>key){
array[end+1]=array[end];
end--;
}
array[end+1]=key;
}
}
2.希尔排序:(缩小增量排序法)
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap = gap/3+1 控制),保证了最后一次进行直接插入排序,算法终止;
void InsertSortwithGap(int array[],int size(),int gap){
for(int i=0;i<size;++i){
int key=arr[i];
int j;
for(j=i-gap;j>=0;j-=gap){
if(array[j]<=key){
break;
}
else{
array[gap+j]=array[j];
}
}
array[gap+j]=key;
}
}
void ShellSort(int array[],int size){
int gap=size;
while(1){
gap=gap/3+1;
InsertSortwithGap(array,size,gap);
if(gap==1){
return;
}
}
}