希尔排序

步骤:1.根据步长将数组分为若干组,然后步长减半

        2.组内进行直接插入排序

       直到步长为0时停止

空间复杂度:O(1)

时间复杂度:O(n²) (最坏情况下)

是不稳定的排序方法

 

 

#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <string.h> 
#include <algorithm>
using namespace std;
int A[1000]={0,49,38,65,97,76,13,27,49,55,4};
void shellSort(int n){//n是数组大小 
    int i,j,dk;
    for(dk=n/2;dk>=1;dk=dk/2){                    //根据步长分组 没错步长减半 
        for(i=dk+1;i<=n;i++){                     //分组内进行直接插入排序 
            if(A[i]<A[i-dk]){
                A[0]=A[i];
                for(j=i-dk;j>0&&A[0]<A[j];j-=dk){
                    A[j+dk]=A[j];
                } 
                A[j+dk]=A[0];
            }
        }
    }
}
int main(){
    shellSort(10);
    for(int i=1;i<=10;i++){
        cout<<A[i]<<" ";
    }
    return 0;
}

 

posted @ 2020-07-09 19:13  Maxwell·  阅读(189)  评论(0编辑  收藏  举报