三種插入排序 直接插入排序,折半插入排序,希爾排序

喝泉水的泉發表於2020-12-21

**

插入排序小結

1.直接插入排序

2.折半插入排序

3.希爾排序

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
void ShellInsert(int a[],int dt,int length){
int t,j;
for(int i=dt;i<length;i++)
    if(a[i]<a[i-dt]){
            t=a[i];
    for(j=i-dt;j>=0&&a[j]>t;j=j-dt)
        a[j+dt]=a[j];
    a[j+dt]=t;

    }
}
void ShellSort(int a[],int dt[],int t,int length){
    for(int i=0;i<t;i++){
        ShellInsert(a,dt[i],length);
    }
}
int main()
{
    int a[10]={49,38,65,97,76,13,27,49,55,04};
    int dt[3]={5,3,1};
    ShellSort(a,dt,3,10);
    for(int i=0;i<10;i++)
    cout <<a[i]<<" ";
    return 0;
}

演算法特點:
跳躍式的移動導致不穩定
只能用於順序結構,不能用於鏈式結構
增量陣列可以有多種取法,但應該使增量中的值沒有除1之外的公因子,並且最後一個增量必須是1;
總的比較次數和移動次數比直接插入排序要少,n越大,效果越明顯。所以適合初始記錄無序,n較大的情況。

相關文章