![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
--------------几种常用排序的python实现
有一种宿命叫无能为力
即便梦想依旧遥不可及,我依然矢志不渝的前进
原博客链接:http://blog.csdn.net/wuxiushu
展开
-
选择法排序
#!/usr/bin/python#coding: utf-8def select_sort(li, num): "选择法排序" for i in range(num - 1): # 对位置进行遍历 min = i # 把i位置记做最小值 for j in range(i + 1, num): # 查找i之后的所有位置原创 2017-01-29 22:47:49 · 395 阅读 · 0 评论 -
基数排序
给定一个列表,获取列表中最大的元素有多少位,依次按照 个位,十位,百位...... 进行排序,对所有的位置都进行排序以后,可以得到最终已经排好序的序列。#!/usr/bin/python#encoding=utf-8 import math def Radix_Sort(res, radix=10): u"a为整数列表, radix为基数" # 获取最大的位数原创 2017-01-30 22:44:19 · 258 阅读 · 0 评论 -
堆排序
预备知识:大顶堆,小顶堆,完全二叉树如果要从小到大排序。就构成大顶堆如果要从大到小排序,就构成小顶堆构造大顶堆代码:#!/usr/bin/python#coding: utf-8def Heap_Sort(res): def Heap_Adujst(res, root, n): while True: child = root * 2 # 当原创 2017-01-30 22:21:37 · 249 阅读 · 0 评论 -
快速排序
相关的快速排序的解释很容易找到,这里只贴代码#!/usr/bin/python#coding: utf-8def Partition(res, low, high): # 把第一个元素作为基准点 point = res[low] while low < high: # 把小于基准点的元素都放在基准点的左边,大于基准点的元素都放在基准点的右边原创 2017-01-30 16:49:36 · 286 阅读 · 0 评论 -
归并排序
什么是归并排序??归并排序的实现过程如图:递归形式的代码如下所示:#!/usr/bin/python#coding: utf-8def Merge_Sort(res): if len(res) <= 1: return res num = len(res) // 2 left = Merge_Sort(res[ : num]) right = M原创 2017-01-30 01:10:41 · 234 阅读 · 0 评论 -
希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。时间复杂度:O(nlogn)该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最原创 2017-01-29 23:53:07 · 220 阅读 · 0 评论 -
冒泡法排序
#!/usr/bin/python#coding: utf-8def bubble_sort(li, num): "冒泡法排序" for i in range(num): # 第几次比较 for j in range(num - i - 1): # 要比较的元素个数 if li[j] > li[j + 1]: #原创 2017-01-29 22:46:59 · 236 阅读 · 0 评论 -
折半(二分)插入排序
#!/usr/bin/python#coding: utf-8def binary_insert_sort(li, num): "折半插入排序" for i in range(1, num): key = li[i] left = 0 right = i - 1 # 查找当前可以防止的位置原创 2017-01-29 22:50:15 · 369 阅读 · 0 评论 -
直接插入排序
#!/usr/bin/python#coding: utf-8def insert_sort(li, num): "直接插入排序" for i in range(1, num): # 如果说当前元素比上一个元素小,则进行交换,把当前的 li[i] 插入到相应的位置 if li[i] li[i - 1]: temp原创 2017-01-29 22:49:43 · 223 阅读 · 0 评论 -
计数排序
#!/usr/bin/python#coding: utf-8"""个人认为计数排序相对来说更难理解,最好花费一些时间来理解下,因为这个求解方法非常不错。该算法的时间复杂度取决于输入的数的范围(假设为k),如果输入范围大于数的数量(假设为n),则此时的时间复杂度为O(k),否则为O(n)"""# 输入数的范围假设为k,设定为1000以内的k = 1000#原创 2017-01-29 22:49:13 · 316 阅读 · 0 评论 -
鸡尾酒排序(双端冒泡排序)
#!/usr/bin/python#coding: utf-8def cocktail_sort(li, num): "鸡尾酒排序,又名:双端冒泡排序" # 减1为了防止越界 num -= 1 i = 0 while i num: # 将最小的数据排到前面,从后往前遍历 j = num while j > i: # j - 1 不会越界,因为while原创 2017-01-29 22:48:32 · 583 阅读 · 0 评论 -
几种排序算法的稳定性判断与总结
(1)冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。(2)选择排序选择排序是给每个位置选择当转载 2017-02-03 22:46:46 · 1000 阅读 · 0 评论