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++
基础教程推荐
猜你喜欢
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C语言 structural body结构体详解用法 2022-12-06
- C++详细实现完整图书管理功能 2023-04-04
- C利用语言实现数据结构之队列 2022-11-22
- 一文带你了解C++中的字符替换方法 2023-07-20
- C/C++编程中const的使用详解 2023-03-26
- C语言基础全局变量与局部变量教程详解 2022-12-31
- 详解c# Emit技术 2023-03-25
- 如何C++使用模板特化功能 2023-03-05
- C++中的atoi 函数简介 2023-01-05