首页 / C++ / Shell排序 C&&C++
Shell排序 C&&C++
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Shell排序 C&&C++,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1601字,纯文字阅读大概需要3分钟。
内容图文
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排序 C&&C++全部内容,希望文章能够帮你解决Shell排序 C&&C++所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。