[PTA]排序类型整理笔记

给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。

本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:

数据1:只有1个元素;
数据2:11个不相同的整数,测试基本正确性;
数据3:1000个随机整数;
数据4:10000个随机整数;
数据5:100000个随机整数;
数据6:100000个顺序整数;
数据7:100000个逆序整数;
数据8:100000个基本有序的整数;
数据9:100000个随机正整数,每个数字不超过1000。
输入格式:
输入第一行给出正整数N(≤10​0000),随后一行给出N个(长整型范围内的)整数,其间以空格分隔。

输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
11
4 981 10 -17 0 -20 29 50 8 43 -5
输出样例:
-20 -17 -5 0 4 8 10 29 43 50 981

我的答案:
(参考:天勤2021版数据结构高分笔记)

(1)首先是main函数:
在这里插入图片描述

(2)各类排序

1.直接插入排序
每趟将一个待排序的关键字按照其值的大小插入到已经排好的部分有序序列的适当位置上,直到所有待排关键字都被插入到有序序列中为止。
在这里插入图片描述
运行结果:
在这里插入图片描述
2.起泡排序
通过一系列交换动作完成。相邻两个关键字进行比较交换,前小后大,第二个关键字再继续与下一个关键字比较。

在这里插入图片描述
运行结果:
在这里插入图片描述
3.快速排序
每一趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢轴,将子序列中比枢轴小的移到枢轴前边,比枢轴大的移到枢轴后边;当本趟所有子序列都被枢轴以上述规则划分完毕后会得到新的一组更短的子序列,他们成为下一趟划分的初始序列集。

在这里插入图片描述tips:main函数里(以及前面的定义)记得把paixu()里改成paixu(0,N-1,List1);

运行结果:
在这里插入图片描述
4.简单选择排序
从头至尾顺序扫描序列,找出一个最小的关键字,和第一个关键字交换,接着从剩下的关键字中继续这种选择和交换,最终使序列有序。

在这里插入图片描述
运行结果:
在这里插入图片描述
5.堆排序
堆:任何一个非叶子结点的值都不大于(或不小于)其左右孩子结点的值的一棵完全二叉树
首先将序列调整为一个大顶堆(父亲大孩子小),从无序序列所确定的完全二叉树的最后一个非叶子结点开始,从右至左,从下至上,对每个结点进行调整,最大关键字在堆顶,将其与最后一个关键字交换,达到最终位置。无序序列关键字减少一个,有序序列中关键字增加一个。
再将其他关键字重新调整为一个大顶堆。
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述
6.二路归并排序
先将整个序列分为两半,对每一半分别进行归并排序,得到两个有序序列,然后将二者归并为一个有序序列。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值