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;? ???? }Shell排序?Shell排序是大量数据需要排序时,更为高效的插入排序。它的算法思想基于插入排序的算法思想流程:(1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等,以此类推(2)一次循环...
沃梦达教程
本文标题为:Shell排序 C&&C++
猜你喜欢
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C语言详解float类型在内存中的存储方式 2023-03-27
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Easyx实现扫雷游戏 2023-02-06
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30
- ubuntu下C/C++获取剩余内存 2023-09-18