快速排序 python实现

每一次写快排都会出现很多问题,我也是很郁闷······
总结一下,顺便看一下这次会不会顺利一些😜

def quick_sort(a,lo,hi):
    if lo < hi:
        tag = partition(a,lo,hi)
        quick_sort(a,lo,tag-1)
        quick_sort(a,tag+1,hi)
    return a
def partition(a,lo,hi):
    i = lo
    j = hi
    temp = a[lo]
    while i < j:
        while i <j and a[j] >= temp:
            j -= 1
        while i< j and a[i] <= temp:
            i += 1
        a[j],a[i] = a[i],a[j]
    a[i],a[lo] = a[lo],a[i]
    return i
遇见的错误

def quick_sort(a) def partition(a) 想要之传入一个参数,所以中间用了quick_sort(a[lo:mid+1]) 测试用例后发现并没有进行排序,debug后找到错误:list切片后产生的是一个新对象,对新对象进行排序,不会对原对象产生作用。ps:我的归并排序写的时候也是用了切片所以这边有点混乱,回看了我的归并才发现归并返回的是 return merge(left,right)返回的是一个新数组,而测试用例的时候是 print merge_sort(a)

a[j] >= temp这里要是大于等于,两个指针时一定要找到大于或者小于的那个数的。如果没有等于的话,遇见数组中有相同的值得时候会出现问题

while i < j 这个条件有一次写的时候就没有写,导致出来的结果肯定不对啦,找了半天。还是快排的原理有些混乱。不加这个条件,只能找到一对比temp值小的数然后进行交换。而快排的一次排序过程是要使得i前面的数都比i小,后面的都比i

ps:事实证明并不顺利,不是缺这个就缺那个,什么时候才能徒手写一点都没错啊啊啊啊啊

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

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,776评论 0 33
  • 前言 八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。常见的...
    LeeLom阅读 98,004评论 41 662
  • 排序算法 冒泡排序 选择排序 插入排序 快速排序(最常见) 希尔排序 归并排序 源码:Sorting 冒泡排序 冒...
    廖少少阅读 2,744评论 12 101
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,391评论 0 1
  • 6.4殷丹种子实践 感恩国美家电回收上门来收我一直要断舍离很久的旧电脑,十分开心又清除一些过去的旧有负能量 感恩牵...
    殷丹阅读 265评论 0 2