希尔排序

来源:互联网 发布:威海打车软件 编辑:程序博客网 时间:2024/04/30 00:40
//不稳定 O(N^2)//一趟Hk排序就是对Hk个独立的子数组执行一次插入排序#include <cstdio>#include <cstring>#include <iostream>using namespace std;void ShellSort(int array[],int n){int increament;int temp;int i,j;for(increament=n/2;increament>0;increament/=2){for(i=increament;i<n;i++){temp=array[i];for(j=i;j-increament>=0&&array[j-increament]>temp;j-=increament)array[j]=array[j-increament];array[j]=temp;}}}int main(){int n;cin>>n;int array[n];for(int i=0;i<n;i++)cin>>array[i];ShellSort(array,n);for(int i=0;i<n;i++)cout<<array[i]<<(i==n-1?'\n':' ');return 0;}
//对于趟Hk排序就是对Hk个独立的子数组执行一次插入排序    下面是更明显的代码,但是复杂度高

void ShellSort(int array[],int n){      int increament;      int temp;      int i,j,x;      for(increament=n/2;increament>0;increament/=2){//增量变化    for(i=0;i<increament;i++){//Hk个独立插入排序 的 起点    for(j=i+increament;j<n;j+=increament){    temp=array[j];    for(x=j-increament;x>=0;x-=increament){    if(array[x]>temp)    array[x+increament]=array[x];    else    break;    }    array[x+increament]=temp;    }    }    }  }  


1 0