算法教给我的人生道理-快速排序

快速排序原来可以很简单

最近在努力算法入门中,今天又看到了快速排序部分,才发现原来同样的东西在不同的书中表达出来可以差那么多(没有褒贬的意思,只是表达个人感受)。本来我认为简单易懂的快速排序,为什么一下变那么复杂。思索一番后,发现其实只是我们有时把它弄复杂了,图解是多么高效的学习方法,还有反思也是很重要的,不要被纷繁复杂的表面所迷惑,一定要看到内核。
可能这也很像钢琴老师最近所说的曲子的风格吧,有的曲子技巧很复杂,但其实内核很简单,有的曲子技巧很简单,但内核不简单。有的像喝茶,有的像喝可乐。也像看书一样吧,今天才发现自己很多时候看完一本书太注重于细节和同理心了,却没有仔细去审视作者的思路和原则,好的书是值得深入思考的。
学编程可能也一样,目前尽管还在学习思考和模仿,但也要有自己的思考,要学会化繁为简,用最快最直接的方法解决问题,用最清晰明了的方法看待和解读问题。
顺便勉励自己一下。上一周看算法和数据结构看得整个人都迷茫了,心想果然程序员要经受身心的巨大考验啊,自己才起步就快折腾不行了。幸运的是今天看代码突然开始有感觉了一些,不觉得那么难,也不觉得那么痛苦了,可能是跨过了一个难的坎又前进了一小步吧。快下班的时候当自己用一分钟迅速完成一个练习解决了一个小问题时,发现自己笑容逐渐变态,可能这就是编程的魔力吧。

复杂的长代码

def quickSort(alist):
    quickSortHelper(alist,0,len(alist)-1)

def quickSortHelper(alist,first,last):
    if first<last:

        splitpoint = partition(alist,first,last)

        quickSortHelper(alist,first,splitpoint-1)
        quickSortHelper(alist,splitpoint+1,last)


def partition(alist,first,last):
    pivotvalue = alist[first]

    leftmark = first+1
    rightmark = last

    done = False
    while not done:

        while leftmark <= rightmark and alist[leftmark] <= pivotvalue:
            leftmark = leftmark + 1

        while alist[rightmark] >= pivotvalue and rightmark >= leftmark:
            rightmark = rightmark -1

        if rightmark < leftmark:
            done = True
        else:
            temp = alist[leftmark]
            alist[leftmark] = alist[rightmark]
            alist[rightmark] = temp

    temp = alist[first]
    alist[first] = alist[rightmark]
    alist[rightmark] = temp


    return rightmark

alist = [54,26,93,17,77,31,44,55,20]
quickSort(alist)
print(alist)

超级简单易懂的实现

def quicksort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0]
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        return quicksort(less) + [pivot] + quicksort(greater)

alist = [54,26,93,17,77,31,44,55,20]
quickSort(alist)
print(alist)
  1. 《python数据结构与算法分析》, 第2版, 布拉德利·米勒, 戴维·拉努姆[美] 著, 吕能, 刁寿钧 译, 人民邮电出版社.
  2. 《算法图解》, Aditya Bhargava [美] 著, 袁国忠 译. 人民邮电出版社.

你可能感兴趣的:(算法,算法,快速排序,python)