shell_sort

来源:互联网 发布:淘宝直播排名规则 编辑:程序博客网 时间:2024/06/06 03:22

            希尔排序是直接插入排序的改进版。首先设置步长len,然后分组,下标之差为步长整数倍的分为一组。然后去len/2作为步长,直至len=1,此时就是直接

      插入排序了。

          

            代码如下:

#include<iostream>using namespace std;void shell_sort(int a[],int n){int i,j,len,tem;   //len为步长len=n/2;    //默认步长设为n/2while(len>=1){for(i=len;i<n;i++)   //当len=1时就是插入排序了{tem=a[i];j=i-len;while(j>=len-1 && a[j]>tem){a[j+len]=a[j];j-=len;}a[j+len]=tem;}len/=2;}}int main(){int a[100];int i,n;while(cin>>n,n){for(i=0;i<n;i++)cin>>a[i];shell_sort(a,n);for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl<<endl;}return 0;}

 

            Attention:

            ①希尔排序是原地排序。

            ②时间复杂度为o(nlog2n),空间复杂度为o(n)。

 

 


 

原创粉丝点击