排序算法—快速排序算法分析與實現(Python)

December 29, 2015 2:09 PM
今天介紹快速排序,這也是在實際中最常用的一種排序算法,速度快,效率高。就像名字一樣,快速排序是最優秀的一種排序算法。

思想

快速排序採用的思想是分治思想。

快速排序是找出一個元素(理論上可以隨便找一個)作爲基準(pivot),然後對數組進行分區操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值 都不小於基準值,如此作爲基準的元素調整到排序後的正確位置。遞歸快速排序,將其他n-1個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正 確位置,排序完成。所以快速排序算法的核心算法是分區操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞歸。

一、假設我們給一個int數組進行排序,數組中數字初始序列爲[3,6,5,9,7,1,8,2,4]
這裏寫圖片描述

二、分析快速排序的原理前,我們先聲明一些東西,首先設置一個臨時變量用來存放隨機取出數組中的一個數,一般我們取數組的第一個元素也就是說temp=a[0],同時設置兩個遊標分別指向數組第一個元素和最後一個元素
這裏寫圖片描述

三、算法的基本運算步驟爲:1、依次比較數組的後遊標所指與temp的大小,如果temp<a[j],則j–,直到遇到第一個temp>a[j],則停止移動,將a[j]賦值給a[i]

四、算法的基本運算步驟爲:2、依次比較數組的前遊標所指與temp的大小,如果temp>a[i],則i++,直到遇到第一個temp<a[i],則停止移動,將a[i]賦值給a[j]

#QuickSort.py
#王淵
#2015.12.23
#Email:[email protected]

from pylab import *


def QuickSort(data, start, end):
    oldStart = start
    oldEnd = end

    flag = True
    while(start < end):                         #從表的兩端向中間掃描
        if flag:                                #樞軸值在子表前邊
            if(data[start]<data[end]):
                end = end-1
            else:
                data[start],data[end] = data[end],data[start]
                start = start+1
                flag = False
        elif (~flag):                          #樞軸值在子表後邊
            if(data[start]<data[end]):
                start = start+1
            else:
                data[start],data[end] = data[end],data[start]
                end = end-1
                flag = True

    if(oldStart != oldEnd):
        QuickSort(data, oldStart, start)        #對低子表遞歸排序
        QuickSort(data, start+1, oldEnd)        #對高子表遞歸排序



data = [48,1,16,62,73,88,24,59,99,0,35]
length = data.__len__()                         #獲取數據長度
print("The original data is : ", data)
QuickSort(data, 0,length-1)
print("The result of sorted data is : ", data)

運行結果:

The original data is :  [48  1 16 62 73 88 24 59 99  0 35]
The result of sorted data is :  [ 0  1 16 24 35 48 59 62 73 88 99]
發佈了30 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章