1、直接插入排序
void InsertSort(Element A[],int n){
int i,j;
for(i=2;i<=n;++i){
if(A[i].key<A[i-1].key){
A[0]=A[i];
for(j=i-1;A[0].key<A[j].key;--j)
A[j+1]=A[j];
A[j+1]=A[0];
}
}
1.1、思想概述
2、折半插入排序
void InsertSort(int A[],int n){
int i,j,low,high,mid;
for(i=2;i<=n;i++){
A[0]=A[i];
low=1;high=i-1;
while(low<=high){
mid=(low+high)/2;
if(A[mid]>A[0])high=mid-1
else low=min+1
}
for(j=i-1;j>=high+1;--j){
A[j+1]=A[j];
A[high+1]=A[0];
2.1、思想概述
- 第一步還是將從2開始到n的元素插入到有序數組中,對應外層的循環
- 第二步時將帶插入元素賦值到哨兵
- 接着使用二分查找尋找適合的插入位置
- 定義low和high
- 開始二分查找
- 查找結束,low=high+1,low就是插入位置
- 從low到i-1都後移
- 插入
3、希爾排序
void shellsort(int A[],int n){
for(int dk=n/2;dk>=1;dk=dk/2){
for(i=dk+1;i<=n;++i){
A[0]=A[i];
for(int j=i-dk;j>0&&A[0]<A[j];j-=dk)
A[j+dk]=A[0];
}
}