zoukankan      html  css  js  c++  java
  • 几种排序算法

    冒泡排序

     1 # 思想就是相邻两数比较交换顺序,每一轮排序可以选出最大或最小值
     2 list = [26, 4, 2, 52, 34, 234, 35, 23]
     3 # print(list[0])
     4 x = 0
     5 y = 1
     6 z = len(list)
     7 while z >= 1:
     8     for i in range(1, z):  # 这样一趟排序可以把列表的最小值排出,排length - 1趟就可以排完
     9         if list[x] < list[y]:
    10             temp = list[x]
    11             list[x] = list[y]
    12             list[y] = temp
    13         else:
    14             pass
    15         x += 1
    16         y += 1
    17         i += 1
    18     # 每完成一次快速排序就重置xy的值
    19     x = 0
    20     y = 1
    21     z -= 1
    22 
    23 print(list)

     选择排序

     1 # 选择排序
     2 # 思想就是每次选出组内的最值,放到最后或者最前面,排序长度依次减少
     3 list = [26, 4, 2, 52, 34, 234, 35, 23]
     4 n = 0
     5 # min = list[n]         #这里选择变量代替列表元素就不行,因为交换值的时候修改的是变量值,而不是列表元素
     6 while n < len(list):
     7     for i in range(n+1,len(list)):
     8         if list[i] < list[n]:
     9             temp = list[n]
    10             list[n] = list[i]
    11             list[i] = temp
    12     n += 1
    13 
    14 
    15 print(list)

    插入排序

     1 # 插入排序   这个时间复杂度不确定,会根据原始的顺序程度来决定,最差情况是n^2
     2 # 思想就是把还没有排序的元素插入到已经拍好序的列表中 把列表排序想象为新列表元素由少到多的插入,关键就是key和i下标的移动,
     3 test = [26, 4, 2, 52, 34, 234, 35, 23]
     4 
     5 list = []
     6 for i in range(0, len(test)):
     7     list.append(test[i])
     8     key = list[i]
     9     if i > 0:           #如果列表只有一个元素,那他肯定是有序的,从第二个元素开始插入
    10         while list[i] < list[i - 1]:
    11             list[i] = list[i - 1]
    12             i -= 1
    13             list[i] = key
    14             if i == 0:
    15                 break
    16 
    17 print(list)

     快速排序

    # 快速排序 思想就是分治法,把大于的放一边,小于的放一边,然后递归的对大的列表、小的列表进行快速排序

     1 # 快排的工作过程分为三步:
     2 # 选择基准值pivot,将列表划分为两个子列表:小于基准值和大于基准值。
     3 # 然后对着两个列表进行快速排序
     4 # 合并结果
     5 
     6 def quicksort(arr):
     7     if len(arr) < 2:
     8         return arr
     9     else:
    10         pivot_index = 0
    11         pivot = arr[pivot_index]
    12         pivot_less = [i for i in arr[pivot_index + 1:] if i <= pivot]
    13         pivot_more = [i for i in arr[pivot_index + 1:] if i > pivot]
    14         return quicksort(pivot_less) + [pivot] + quicksort(pivot_more)  # 递归的对子列进行快速排序
    15 
    16 
    17 def testquicksort():
    18     import random
    19     seq = list(range(10))
    20 
    21     random.shuffle(seq)  # 对列表进行随机排序
    22     print(seq)
    23     sortseq = quicksort(seq)
    24     print(sortseq)
    25 
    26 
    27 testquicksort()

    看一个排序是否稳定主要是看他排序完成后,值相同的元素是否可能交换顺序。

    选择排序,希尔排序,快速排序,是不稳定的

  • 相关阅读:
    ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍) 【转】
    一个建议,看看大家的意见。
    发现不错的文章,推!
    有个小问题,大家一起研究。
    逼不得已,这个我确实不会,昨办?
    MSN Message6.2 的小BUG
    在IE7浏览器中切换成以资源管理器方式
    手机罗盘(指南针)校准方法
    G13/ Wildfire S/A510e link2SD教程,干净清洁的安装程序到内存卡
    HTC G13电池怎么鉴别真伪
  • 原文地址:https://www.cnblogs.com/x991788x/p/15106593.html
Copyright © 2011-2022 走看看