稳定算法
前言
排序算法
• 所谓 排序 ,使一串记录,按照其中的 某个或某些关键字 的大小,递增或递减的排列起来的操作
• 排序算法 ,就是如何使得记录按照要求排列的方法
• 排序算法在很多领域是非常重要
在 大量数据 的处理方面:一个优秀的算法可以节省大量的资源。
在 各个领域 中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析
一、什么是排序和排序算法?
排序:使一串集录,按照其中的某个或某些关键字的大小递增递减.
排序算法:使记录递增递减的方法.
二、稳定性算法
1.什么是稳定性算法?
具有相同关键字的记录经过排序后,相对位置保持不变,这样的算法算稳定性算法.
稳定性算法举例:冒泡排序、插入排序、归并排序和基数排序
1.冒泡排序
相邻位置两个元素 比较, 前面的元素 比 后面的元素 大则交换,
把最大的数给找到
经过一轮一轮的比较最终把序列给排序
![](https://img-blog.csdnimg.cn/direct/7925049520c14463951d16b8db91e029.png)
代码演示:
def bubble_sore(alist):
"""冒泡排序"""
#数列的长度
n = len(alist)
#外层循环控制轮数
for i in range(0,n-1):
#计数
count=0
#内层循环控制比较次数(相邻位置两个元素比较次数)
for j in range(0,n-i-1):
比较相邻的两个数字,符合要求交换位置
if alist[j]>alist[j+1]:
alist[j],alist[i+1]=alist[i+1],alist[i]
count+=1
# 若遍历完一遍历完之后,数字没有交换,说明序列有序,退出外层循环
if count == 0:
break
2.插入排序
插入排序的组成
插入算法把要排序的数组分成 两部分 :第一部分是 有序的数字 (这里可以默认数组第一个数字为有序的第一部分),第二
部分为 无序的数字 (这里除了第一个数字以外剩余的数字可以认为是无序的第二部分)
代码示例:
def insert_sort(alist):
n = len(alist)
# 外层循环控制轮次
for i in range(1, n):
# 内层循环控制 插入位置
for j in range(i, 0, -1)
# alist[i]为待插入的数据
# 若待插入数据小于有序数据,则插入; 若待插入数据大于有序
#数据,则break
print("要插入的数 pk 要比较的数:", alist[i], alist[i - 1])
if alist[i] < alist[i-1]:
alist[i], alist[i-1] = alist[i-1], alist[i]
else:
break
总结
1、假定在待排序的记录序列中,存在 多个具有 相同的关键字 的记录
2、若经过排序,这些记录的 相对次序保持不变 , 则称这种排序算法是稳定的, 否则称为不稳定的 记忆:具有相同关键字的纪录经过排序后,相对位置保持不变,这样的算法是稳定性算法