随机生成函数
void RandSqList(SqList &L){ int n,max,min; printf("输入顺序表的大小\"); cin>>n; printf("输入最小值和最大值\"); cin>>min>>max; L.length=n; printf("随机产生%d个数\",n); for(int i=1;i<=L.length;++i) { L.r[i].key=rand()%(max-min+1); L.r[i].key+=min; } printf("顺序表创建成功!\");}输出函数
void Output(SqList L){ printf("输出:\"); for(int i=1;i<=L.length;i++) cout<<"data"<<"["<<i<<"]"<<": "<<L.r[i].key<<endl;}结论(1)若n较小(例如n<50), 可采用直接插入排序、冒泡排序或简单选择排序 。 如果记录中的数据较多, 移动较费时的, 应采取简单选择排序法 。
(2)若记录的初始状态已经按关键码基本有序, 则选用直接插入排序或冒泡排序法为宜 。
(3)若n较大, 则应采用改进排序方法, 如快速排序、堆排序或归并排序法 。 这些排序算法的时间复杂度均为O(nlog2n), 但就平均性能而言, 快速排序被认为是目前基于比较记录关键码的内部排序中最好的排序方法, 但遗憾的是, 快速排序在最坏情况下的时间复杂度是O(n2), 堆排序与归并排序的最坏情况时间复杂度仍为O(nlog2n) 。 堆排序和快速排序法都是不稳定的排序 。 若要求稳定排序, 则可选用归并排序 。
(4)基数排序可在O (d×n) 时间内完成对n个记录的排序, d是指单逻辑关键码的个数, 一般远少于n 。 但基数排序只适用于字符串和整数这类有明显结构特征的关键码 。
(5)前面讨论的排序算法, 除基数排序外, 都是在顺序存储上实现的 。 当记录本身的信息量很大时, 为避免大量时间用在移动数据上, 可以用链表作为存储结构 。 插入排序和归并排序都易在链表上实现, 但有的排序方法, 如快速排序和堆排序在链表上却很难实现 。
写在最后:对于准备学习C/C++编程的小伙伴, 如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记, 基础入门教程)
【c语言程序的基本结构由什么组成,c语言选择结构教学】欢迎转行和学习编程的伙伴, 利用更多的资料学习成长比自己琢磨更快哦!
- c语言的数据类型示意图,c语言里基本数据类型
- c语言用什么软件编辑,查找c语言答案的软件
- 治疗失眠的药物都有哪些
- 大三阳和小三阳区别的化验单怎么看
- 二对半化验单怎么看
- 怎么给2018-19赛季的NBA全明星赛投票?
- 衣服上的黑毛毛怎么去除?
- 40岁以后的中年男人大肚腩通过锻炼还能消灭吗?
- 我老婆左眼一直跳,各位大神有什么好的解决方案?
- 茭白的营养价值,孕妇能吃茭白吗?
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
