python之鸡尾酒排序-cocktailSort
鸡尾酒排序
鸡尾酒排序是在冒泡排序上的基础上,进行的一次升级。冒泡排序只是单一方向的进行遍历,而鸡尾酒排序的比较和交换是双向进行,这样大大提升了效率。
原理
举一个简单的列表:
[24, 12, 2, 3, 20, 44, 5, 48, 10, 22]
第一轮的时候,整体遍历从左向右
第一次
[24, 12, 2, 3, 20, 44, 5, 48, 10, 22]
[ 12,24, 2, 3, 20, 44, 5, 48, 10, 22]
第二次
[12, 24, 2, 3, 20, 44, 5, 48, 10, 22]
[ 12,2, 24, 3, 20, 44, 5, 48, 10, 22]
第三次
[12, 2, 24, 3, 20, 44, 5, 48, 10, 22]
[ 12,2, 3, 24, 20, 44, 5, 48, 10, 22]
第四次
[12, 2, 3, 24, 20, 44, 5, 48, 10, 22]
[ 12,2, 3, 20, 24, 44, 5, 48, 10, 22]
第五次
[12, 2, 3, 20, 24, 44, 5, 48, 10, 22]
[ 12,2, 3, 20, 24, 44, 5, 48, 10, 22]
第六次
[12, 2, 3, 20, 24, 44, 5, 48, 10, 22]
[ 12,2, 3, 20, 24, 5, 44, 48, 10, 22]
第七次
[12, 2, 3, 20, 24, 5, 44, 48, 10, 22]
[ 12,2, 3, 20, 24, 5, 44, 48, 10, 22]
第八次
[12, 2, 3, 20, 24, 5, 44, 48, 10, 22]
[ 12,2, 3, 20, 24, 5, 44, 10, 48, 22]
第九次
[12, 2, 3, 20, 24, 5, 44, 10, 48, 22]
[ 12,2, 3, 20, 24, 5, 44, 10, 22, 48]
第二轮的时候,整体遍历从右向左,但此时最大的值已经遍历得出了,那么就只需要从剩下的9个元素中遍历
第一次
[12, 2, 3, 20, 24, 5, 44, 10, 22, 48]
[ 12,2, 3, 20, 24, 5, 44, 10, 22, 48]
第二次
[12, 2, 3, 20, 24, 5, 44, 10, 22, 48]
[ 12,2, 3, 20, 24, 5, 10, 44, 22, 48]
第三次
[12, 2, 3, 20, 24, 5, 10, 44, 22, 48]
[ 12,2, 3, 20, 24, 5, 10, 44, 22, 48]
第四次
[12, 2, 3, 20, 24, 5, 10, 44, 22, 48]
[ 12,2, 3, 20, 5, 24, 10, 44, 22, 48]
第五次
[12, 2, 3, 20, 5, 24, 10, 44, 22, 48]
[ 12,2, 3, 5, 20, 24, 10, 44, 22, 48]
第六次
[12, 2, 3, 5, 20, 24, 10, 44, 22, 48]
[ 12,2, 3, 5, 20, 24, 10, 44, 22, 48]
第七次
[12, 2, 3, 5, 20, 24, 10, 44, 22, 48]
[ 12,2, 3, 5, 20, 24, 10, 44, 22, 48]
第八次
[12, 2, 3, 5, 20, 24, 10, 44, 22, 48]
[ 2,12, 3, 5, 20, 24, 10, 44, 22, 48]
代码
从右向左遍历得到最小的值之后剩下的内容同理
原理清楚之后,上代码
1、创建随机列表
def creat_random_list(): ''' 创建随机列表 :return: 列表结果 ''' num = int(input('请输入生成数组的规模:')) start_num = int(input('请输入开始的数字:')) end_num = int(input('请输入结束的数字:')) for i in range(num): n = random.randint(start_num, end_num) num_list.append(n) return num_list
2、鸡尾酒排序具体实现
def cocktail_sort(res_num): ''' 实现鸡尾酒排序 :param res_num: 随机数列 :return: 排序之后的列表 ''' for i in range(len(res_num)//2): # 因为是双向遍历,做一半即可 # 设置发生交换的标记变量 isSorted = True for odd in range(i, len(res_num) - i -1): # 奇数轮 if res_num[odd] > res_num[odd + 1]: res_num[odd], res_num[odd + 1] = res_num[odd + 1], res_num[odd] isSorted = False if isSorted: break # 发生比较交换之前,重新更新一下isSorted isSorted = True for even in range(len(res_num) - i -1, i, -1): if res_num[even] < res_num[even - 1]: res_num[even], res_num[even - 1] = res_num[even - 1], res_num[even] isSorted = False if isSorted: break return res_num
执行效果
- 排序算法——鸡尾酒排序(Cocktail sort)【代码实现】
- 鸡尾酒排序Cocktail sort
- 鸡尾酒排序Cocktail Sort(排序算法九)
- Cocktail Sort 鸡尾酒排序 (来回排序)
- 鸡尾酒排序Cocktail Sort(排序算法九)
- Python: 字典排序 关于sort()、reversed()、sorted()
- Python中的sort()方法使用基础
- LeetCode--Sort Colors(颜色排序)Python
- python中的sort方法使用详解
- Leetcode with Python -> Sort
- python sort sorted 排序详解
- CF 346A(Alice and Bob-Python,sort)
- python 高阶函数:sort,filter,reduce,map
- python module学习之natsort
- 【Python基础】之对字典进行排序操作(sort by the values of dict)
- PYTHON 中的sorted 和sort的区别
- [LeetCode]题解(python):075-Sort Colors
- python中argsort,sort 和 sorted,operator.itemgetter函数
- python 列表排序方法reverse、sort、sorted详解
- python3 sort sorted 函数应用