5、排序算法
排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。
1、选择排序
每次在若干无序数据中查找最小数(最大数),放在无序数据的首位(末位)。
以升序为例:
# 从N个元素列表中找最小值及其下标,与第一个元素交换
# 从第二个元素开始的 N-1 个元素中找最小值及其下标,与第二个元素交换
# 以此类推,N-1 轮后排序完成
不稳定:当待排序列中有相等的元素时,排序过程中很可能打乱相等元素的位置,经常会来回交换,因此选择排序是不稳定的排序。
用python代码实现选择排序:
选择排序算法的分析:
# 选择排序共需比较 N-1 轮,总共的比较次数为 (N-1)+(N-2)+...+2+1=N(N-1)/2 次
# 选择排序执行交换的次数为N-1
2、冒泡排序
用python实现冒泡排序:
(冒泡排序比选择排序的效率还要低)
3、函数
用函数实现各种排序
4、归并排序:分而治之
# 将包含N个元素的列表拆分成两个含N/2个元素的子列表
# 对两个子列表递归调用归并排序(最后可将整个列表分解为N个子列表)
# 合并两个已排好序的子列表
用python实现归并排序:
归并排序算法的分析:
# 归并排序需要将列表一步步拆分成子列表,共 log2N 步
# 每一步都相当于需要合并N个元素的有序列表,最大比较次数是N次
# 归并排序需要至多Nlog2N 次比较
谨记:不积跬步无以至千里