• 排序算法----快速排序


    快速排序

    • 将列表中第一个元素设定为基准数字,赋值给mid变量,然后将整个列表中比基准小的数值放在基准的左侧,比基准到的数字放在基准右侧。然后将基准数字左右两侧的序列在根据此方法进行排放。
    • 定义两个指针,low指向最左侧,high指向最右侧
    • 然后对最右侧指针进行向左移动,移动法则是,如果指针指向的数值比基准小,则将指针指向的数字移动到基准数字原始的位置,否则继续移动指针。
    • 如果最右侧指针指向的数值移动到基准位置时,开始移动最左侧指针,将其向右移动,如果该指针指向的数值大于基准则将该数值移动到最右侧指针指向的位置,然后停止移动。
    • 如果左右侧指针重复则,将基准放入左右指针重复的位置,则基准左侧为比其小的数值,右侧为比其大的数值。

      

     1 #方式一:此方法理解简单,但是系统资源占用过大
     2 def quick_sort(int_list):
     3     if len(int_list) <= 1: return int_list
     4     # divide = int_list.pop()
     5     divide=int_list[-1]
     6     greater_list, lesser_list = [], []
     7     for element in int_list[:-1]:
     8         greater_list.append(element) if divide < element else lesser_list.append(element)
     9     return quick_sort(lesser_list) + [divide] + quick_sort(greater_list)  # 递归进行
    10 
    11 #方式二
    12 def quick_sort1(int_list, start, end):
    13     low = start
    14     high = end
    15     if low > high:
    16         return int_list
    17     divide = int_list[low]
    18     while low < high:
    19         while low < high:
    20             if int_list[high] < divide:
    21                 int_list[low] = int_list[high]
    22                 break
    23             else:
    24                 high -= 1
    25         while low < high:
    26             if int_list[low] > divide:
    27                 int_list[high] = int_list[low]
    28                 break
    29             else:
    30                 low += 1
    31 
    32     int_list[low] = divide  # 每次调用排好基数位置
    33     quick_sort1(int_list, start, low - 1)  # 对小于基数的部分进行同样排序操作
    34     quick_sort1(int_list, high + 1, end)  # 对大于基数的部分进行同样排序操作
    35 
    36     return int_list
    37 
    38 
    39 # 245,689,3454,123,90987,2,3,4
    40 if __name__ == '__main__':
    41     int_str = input("请输入逗号分割的整数>>>").strip()
    42     int_list = [int(i) for i in int_str.split(",")]
    43     print(quick_sort(int_list))
    44 
    45     # print(quick_sort1(int_list, 0, len(int_list) - 1))
  • 相关阅读:
    java ,js获取web工程路径
    js 无刷新分页代码
    js 获取时间对象代码
    jquery 文本框失去焦点显示提示信息&&单击置空文本框
    CodeForces
    nth_element() O(n)复杂度求第k+1小元素
    CodeForces
    HDU
    杜教BM
    J
  • 原文地址:https://www.cnblogs.com/open-yang/p/11367100.html
Copyright © 2020-2023  润新知