快速排序(Python版)--个人理解写到详细注释中

  • 深入理解算法中‘分割’的概念。
  • 在序列变换中巧妙使用‘空位’, 使代码变得美观
  • 推荐每个程序员可以在十分钟内写完如下代码
  • 面试前,先写个快排
  • 在入门一个新的程序语言时,不妨先写个快排练练
# Quick Sort 
# 选取一个Key 
# 对比: 将比Key小的放到左边,比Key大的放到右边
# 循环: 直至每个元素都与key对比过了
# 递归: key左侧的和key右侧的分别递归

list = [5,7,1,8,4]
count = len(list)
def quickSort(L, low, high):
    print('\nquickSort: ', L, low, high)
    i = low 
    j = high
    if i >= j:
        return L
    # 为了序列调位方便 在序列中挖出一个空位
    # 此时空位 序列中i的位置
    key = L[i] 
    while i < j:
        while i < j and L[j] >= key: # 遍历key右侧的值
            j = j-1                  # 若不小于key,j向左挪一个 
        # 此时序列中的空位为L[i],赋值后变为L[j]
        L[i] = L[j]   #此时j指向的值小于key, 将其赋给i指向的位置(i值在key 值的左侧)
        while i < j and L[i] <= key: #遍历key左侧的值
            i = i+1                  # 若不大于key, i 向右挪一个
        # 此时序列中的空位为L[j], 赋值后变为L[i]
        L[j] = L[i]   #此时i 指向的值大于key,将其值赋给(空位)
        print(L, i, j)
        # 每循环一次调整序列中的两个值
        # key右侧的一个值和key左侧的一个值
        # 不断循环直到i = j,即key左侧的均小于key,右侧的均大于key
    # 此时i = j , 将key值放入空位中   
    L[i] = key 
    quickSort(L, low, i-1)
    quickSort(L, j+1, high)
    return L 

quickSort(list,0,count-1)

无注释版

def quick_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

一行版---- 利用序列切片

import numpy as np
# 生成随机序列
randomList = np.random.randint(500,size=100)
print(randomList)

def qsort(numbers):
    if len(numbers) == 0: return []
    else: return qsort([i for i in numbers[1:] if i <= numbers[0]]) + [numbers[0]] + qsort([i for i in numbers[1:] if i > numbers[0]])

qsort(randomList)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,466评论 25 708
  • 今日分享 极简主义者产生的条件,主要是有三个: 1.泛滥的信息和物质 打开手机,可以了解到各种信息,信息量爆炸式增...
    雪23阅读 123评论 0 0
  • 哈喽大家好.我是林森.今天我给大家分享的是社群营销! 从2013年至今,投身微商的行业的人数愈2000万,微商形势...
    艾丽森阅读 378评论 0 0
  • 随着年纪的增长,并且由于工作的原因,近来,我越来越认识到拥有一副健康的体魄是多么重要。25岁,年轻,可是感觉突然要...
    清空Q阅读 420评论 0 0
  • 有时候还上的空气可新鲜啦,我有时候还在海面上拿上。我的救生圈我每次都在海面上游泳。我不知道为什么?我都还不知道还可...
    谢运生阅读 233评论 0 0