Python排序(一)
来源:互联网 发布:淘宝天天特价首页 编辑:程序博客网 时间:2024/06/07 05:57
用python实现插入排序(希尔排序、插入排序)和交换排序(快速排序、冒泡排序)
1.list列表排序
只需调用python中的sorted()方法就可以实现升序排序
>>> sorted([5, 2, 3, 1, 4])[1, 2, 3, 4, 5]
加入一行y.sort(reverse = True)
就能实现降序排序
2.冒泡排序
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
def sort(lists, left, right): if left >= right: return lists key = lists[left] low = left high = right while left < right: while left < right and lists[right] >= key: right -= 1 lists[left] = lists[right] while left < right and lists[left] <= key: left += 1 lists[right] = lists[left] lists[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return listsif __name__ == '__main__': lists = [5, 2, 3, 1, 4] print sort(lists)
3.快速排序
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j–),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
def sort(lists, left, right): if left >= right: return lists key = lists[left] low = left high = right while left < right: while left < right and lists[right] >= key: right -= 1 lists[left] = lists[right] while left < right and lists[left] <= key: left += 1 lists[right] = lists[left] lists[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return lists if __name__ == '__main__': lists = [5, 2, 3, 1, 4] print sort(lists)
4.插入排序
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
def sort(lists): count = len(lists) for i in range(0, count): min = i for j in range(i + 1, count): if lists[min] > lists[j]: min = j lists[min], lists[i] = lists[i], lists[min] return listsif __name__ == '__main__': lists = [5, 2, 3, 1, 4] print sort(lists)
5.希尔排序
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2
def sort(lists): count = len(lists) step = 2 group = count / step while group > 0: for i in range(0, group): j = i + group while j < count: k = j - group key = lists[j] while k >= 0: if lists[k] > key: lists[k + group] = lists[k] lists[k] = key k -= group j += group group /= step return listsif __name__ == '__main__': lists = [5, 2, 3, 1, 4] print sort(lists)
- Python排序(一)
- Python(二)排序(一)list排序
- python实现排序算法一:快速排序
- (一)冒泡排序-python实现
- Python冒泡排序精讲<一>
- Python学习笔记(一)字典排序
- Python之快速排序算法实现(一)
- Python一日一练07----冒泡排序
- Python一日一练08----鸡尾酒排序
- Python一日一练09----奇偶排序
- Python一日一练10----快速排序
- Python一日一练11----选择排序
- Python一日一练12----堆排序
- Python一日一练13----插入排序
- Python一日一练14----希尔排序
- Python一日一练15----归并排序
- 排序算法一:内部排序算法Python实现
- 我的Python学习(一)——快速排序
- Nginx安装
- 聊聊TCP超时
- c语言练习(2)
- java的a星算法玩
- 面向对象程序设计上机练习四(变量引用)
- Python排序(一)
- 日常总结3
- 学习JAVA的理解1
- 原生js实现tab切换
- HDU
- 地图随机生成lua版本
- codeup答题记录 Shortest Distance
- max
- 呕心沥血ubuntu16.04.3编译安装mysql源码