// Shell sort program in c++#include <iostream>using namespace std; void swap(int *array,int i,int j){ int temp=array[i]; array[i]=array[j]; array[j]=temp;}//分部中的插入入排序。void middleInsertSort(int *Array,int n,int delta){ for(int i=delta;i<n;i+=delta) //是相隔一个delta进行插入排序。 for(int j=i;j>=delta;j-=delta) //与前面的几个元素比较交换。 { if(Array[j]>Array[j-delta]) swap(Array,j,j-delta); else break; //比了其中的最大的或最小的就不用再比其他元素 } //节约时间。} //Shell sortvoid ShellSort(int *A,int n){ for(int delta=n/2;delta>0;delta/=2) //分几级的跳。 for(int j=0;j<delta;j++) //比前面的和后面的对应。 middleInsertSort(&A[j],n-j,delta);//&A[j]采取直接寻地址的找到。节省} //时间。n-j比完后面的还要比的数目。 //输出元素void print(int *A,int n){ cout<<"print cout all number:"; for(int i=0;i<n;i++) cout<<A[i]<<" "; cout<<endl;}int main(){ int n; cout<<"Enter the sun of number: "; cin>>n; int *A=new int[n]; cout<<"Enter the number: "<<endl; for(int i=0;i<n;i++) cin>>A[i]; ShellSort(A,n); print(A,n); delete[] A; return 0;}

评论