Shell排序 C&&C++

Shell排序   Shell排序是大量数据需要排序时,更为高效的插入排序。它的算法思想基于插入排序的算法思想 流程: (1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等,以此类推 (2)一次循环使每一个数对排列好顺序 (3)变成n/4个数对,再次排序。 (4)不断重复上述过程,随着序列减少直至最后变为1个,完成排序。 具体如何怎么排的可以运行代码查看每一步排序。     #include<iostream> #include<cstdlib> #include<ctime> using namespace std; void ShellSort(int *a,int len) {     int x,t,j;     for (int r = len/2; r >=1 ; r/=2)    //外层循环分组     {         for (int i = r; i < len; i++)             {//内层循环设置一定间距r,分别比较对应元素,当r=1时,这个时候就为插入排序,数组元素数量大时这时效率比插入排序高。             t=a[i];             j=i-r;             while (j>=0&&t<a[j])             {                 a[j+r]=a[j];                 j-=r;             }             a[j+r]=t;             x++;             cout<<"Sort result after "<<x<<" step";              //输出每一步排序结果             for (int k = 0; k < len; k++) cout<<a[k]<<" ";             cout<<endl;         }              }      } int main() {     srand(time(NULL));     int n;     cout<<"Please cin the size of array:"<<endl; //输入数组的大小     cin>>n;     int a[n];     cout<<"Array before sorting:"<<endl;     for (int i = 0; i < n; i++)            //利用随机数作为数组输入     {         a[i]=rand()/1000;         cout<<a[i]<<" ";     }     cout<<endl;     ShellSort(a,10);     cout<<"Array after sorting:"<<endl;  //输出排序后的数组     for (int i = 0; i < 10; i++) cout<<a[i]<<" ";     cout<<endl;     return 0;       }
上一篇:c++中endl操作符以及它的兄弟们


下一篇:JS 每日一题 #13