没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
33页
快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本 快速排序等经典排序算法C++、Java、python等版本
资源推荐
资源详情
资源评论
第十六章 排序算法
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的
记录序列调整为“有序”的记录序列。分内部排序和外部排序,若
整个排序过程不需要访问外存便能完成,则称此类排序问题为
内部排序。反之,若参加排序的记录数量很大,整个序列的排
序过程不可能在内存中完成,则称此类排序问题为外部排序。
内部排序的过程是一个逐步扩大记录的有序序列长度的过程。
总而言之:将杂乱无章的数据元素,通过一定的方法按照关键
字顺序排列的过程叫做排序。
十大经典排序分别是冒泡排序,插入排序,选择排序,希尔排序,
计数排序,基数排序,桶排序,快速排序,归并排序和堆排序。
其中,快速排序,堆排序,选择排序和希尔排序是不稳定的排序算
法;而基数排序,冒泡排序,插入排序,计数排序,归并排序和桶
排序为稳定的排序算法。
算法的分类
十种常见排序算法可以分为两大类:
比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称
为非线性时间比较类排序。
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线
性时间运行,因此也称为线性时间非比较类排序。
排序的稳定性
排序按照稳定性分为稳定的排序算法和不稳定的排序算法。
1
稳定排序:假设在待排序的文件中,存在两个或两个以上的记录
具有相同的关键字,在
用某种排序法排序后,若这些相同关键字的元素的相对次序仍然
不变,则这种排序方法
是稳定的。
2
不稳定排序:假设在待排序的文件中,存在两个或两个以上的记
录具有相同的关键字,在用某种排序法排序后,若这些相同关键
字的元素的相对次序发生了变化,则这种排序方法是不稳定的。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一
对,这样在最后的元素应该会是最大的数;
针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。
代码
#首行输入一个数字n 代表我们要输数字的个数
#次行输入n个数,代表要排序的数字
def bubble_sort(arr:list, l:int, r:int):
#数组的长度
len = r - l + 1
for i in range(len - 1):
for j in range(len - 1 - i): #每一轮排序
必定有一个被排好了
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j +
1], arr[j] #交换
if __name__ == "__main__":
n = input();
data = [int(x) for x in input().split()]
#左右区间
复杂度和算法分析
时间复杂度:O(n^2)
空间复杂度:O(1)
最简单的排序算法,遇事不决冒泡排序就完事儿了。
选择排序
选择排序(Selection-sort)是一种简单直观的排序算法。它的工
作原理:首先在未排序序列中找到最小(大)元素,存放到排
序序列的起始位置,然后,再从剩余未排序元素中继续寻找最
小(大)元素,然后放到已排序序列的末尾。以此类推,直到
所有元素均排序完毕。
算法思路
n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。
具体算法描述如下:
初始状态:无序区为R[1..n],有序区为空;
第i趟排序 (i=1,2,3…n-1) 开始时,当 1个记录R交换,使 R[1..i] 和 R[i+1..n) 分别变为记录个数增加1
个的新有序区和记录个数减少1个的新无序区;
n-1趟结束,数组有序化了。
l = 0
r = int(n) - 1
bubble_sort(data, l, r)
print(' '.join(list(map(str, data))))
剩余32页未读,继续阅读
资源评论
狮子也疯狂
- 粉丝: 1w+
- 资源: 264
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功