当前位置: 首页 > article >正文

数据结构(十)——排序

一、选择排序

1.简单选择排序

基本思想:假设排序表为[1,…,n],第i趟排序即从[i,…,n]中选择关键字最小的元素与L[i]交换

eg:给定关键字序列{87,45,78,32,17,65,53,09},用简单选择排序算法进行排序

代码实现:

void SelectSort(ElemType A[],int n){for(i=0;i<n-1;i++){min=i;for(j=i+1;j<n;j++){if(A[j]<A[min]){min=j;}}if(min!=i){swap(A[i],A[min]);}}
}

空间效率:O(1)

时间效率:O(n^2)

稳定性:稳定

2.堆排序

(1)构造大根堆

eg:下面的序列中,()是堆

A.1,2,8,4,3,9,10,5    B.1,5,10,6,7,8,9,2    C.9,8,7,6,4,8,2,1    D.9,8,7,6,5,4,3,7

答案:A

(2)删除元素

输出栈顶元素后,将堆的最后一个元素与栈顶元素交换,此时堆的性质被破坏

(3)插入元素

对堆进行插入操作时,先将新结点放在堆的末端,再对这个新结点向上执行调整操作

空间效率:O(1)

时间效率:O(nlog2n)

稳定性:不稳定

eg:设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列(B)方法可以达到目的

A.快速排序  B.堆排序  C.冒泡排序  D.希尔排序

二、归并排序

“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表

2路归并排序:

空间效率:O(n)

时间效率:O(nlog2n)

稳定性:稳定

eg:一组记录值为(12,38,35,25,74,50,63,90),按2路归并排序方法对序列进行一趟归并后的结果是(12,38,25,35,50,74,63,90)

三、基数排序

基数排序不基于比较和移动进行排序,而是基于关键字各位的大小排序

个位:

十位:

百位:

空间效率:O(r)

时间效率:O(d(n+r))   d为趟数

稳定性:稳定

eg:如果将所有中国人按照生日(不考虑年份,只考虑月、日)来排序,那么使用下列排序算法中的(D)算法最快

A.归并排序  B.希尔排序  C.快速排序  D.基数排序

四、各种排序算法的比较

eg:在直接插入排序和快速排序中,若初始数据基本有序,则选用(直接插入排序);在冒泡排序和堆排序中,若要求数据的稳定性,则选用(冒泡排序

eg:以下四种排序方法中,需要附加的内存空间(空间复杂度)最大的是(D)

A.插入排序  B.选择排序  C.快速排序  D.归并排序

eg:一趟排序结束之后不一定能够选出一个元素放在其最终位置上的是(D)

A.简单选择排序  B.冒泡排序  C.快速排序  D.希尔排序

五、习题

 

答案:A

答案:√

答案:A

答案:A

答案:不是;7,18,21,41,58,63,29,43

答案:

第一趟:12,51,23,55,07,49,36,72,12'

第二趟:12,23,51,55,07,36,49,72,12'

第三趟:07,12,23,36,49,51,55,72,12'

第四趟:07,12,12',23,36,49,51,55,72

答案:C

答案:快速排序;O(nlog2n)

答案:D

http://www.lryc.cn/news/2380159.html

相关文章:

  • 美蛋工具箱:一站式解决图片、视频、音频和文档处理需求的聚合神器
  • fastadmin 数据导出,设置excel行高和限制图片大小
  • python打卡day16
  • Redis 学习笔记 5:分布式锁
  • 游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
  • VS2017编译librdkafka 2.1.0
  • 02- 浏览器运行原理
  • Reactor模型详解与C++实现
  • 人工智能重塑医疗健康:从辅助诊断到个性化治疗的全方位变革
  • 移除链表元素数据结构oj题(力扣题206)
  • 学习记录:DAY29
  • OpenTelemetry 从入门到精通
  • 数学复习笔记 17
  • C语言:在操作系统中,链表有什么应用?
  • 解锁MySQL性能调优:高级SQL技巧实战指南
  • 裸金属服务器和云服务器之间的差别
  • WebSocket实时双向通信:从基础到实战
  • 【免杀】C2免杀技术(六)进程镂空(傀儡进程)
  • ETL数据集成产品选型需要关注哪些方面?
  • Eclipse Java 开发调优:如何让 Eclipse 运行更快?
  • 彻底理解事件循环(Event Loop):从单线程到异步世界的桥梁
  • java加强 -stream流
  • Vue百日学习计划Day33-35天详细计划-Gemini版
  • Linux(2)——shell原理及Linux中的权限
  • 如何在线免费压缩PDF文档?
  • EasyExcel动态表头
  • 汽车装配又又又升级,ethernetip转profinet进阶跃迁指南
  • css:无限滚动波浪线
  • 显示器无法接受键盘/鼠标问题解决
  • w~自动驾驶~合集3