shell排序(希尔排序(C++代码))

 1 #include<iostream>
 2 using namespace std;
 3 int pt[1000001];
 4 void shell(int*,int);
 5 void insert(int*,int,int,int);
 6 int main()            //shell排序
 7 {
 8    int num,L,i=0;
 9    
10    while(cin>>num)
11    {
12        pt[i++]=num;
13 
14        if(cin.get()=='\n')  break;
15    }
16    L=i;
17 
18    shell(pt,L);
19    insert(pt,0,1,L);      //易遗漏
20 
21 
22    for(i=0;i<L;i++)
23        cout<<pt[i]<<" ";
24 }
25 
26 void shell(int*pt,int n)        //shell排序
27 { 
28     for(int i=n/2;i>=2;i/=2)          //注意i=2(而课本上的没有(error))
29             for(int j=0;j<i;j++)
30                 insert(pt,j,i,n);
31 }
32 
33 
34 void insert(int*pt,int left ,int gap,int n )
35 {   
36     int i,j,num;
37     for( j=left+gap;j<n;j+=gap)
38     
39     for( i=j;i>left;i-=gap)
40         if(pt[i-gap]>pt[i])
41           {
42             num=pt[i];pt[i]=pt[i-gap];pt[i-gap]=num;
43           }
44 }

 

  

  

posted on 2012-11-30 20:40  Besion王  阅读(301)  评论(0编辑  收藏  举报

导航