快速排序(重點)
一、算法思想
快排可以說是數據結構這門課里很重要的一個內容了,關鍵就在於快排的思想適用於很多算法場景,快排的思想就是交換,通過不斷交換兩個元素的位置使得最后能在序列中確定出一個元素在排序算法的最終位置。
例如給出序列{5,3,6,2,1,4},快排的思想就是把第一個元素A[1]當做一個界,在A中找到一個位置,使得A[i]=5,而且該元素左邊元素值都比5小,右邊元素值都比5大,這時候可以再對左右兩個子序列進行第二次排序。
所以快排的思想主要是,通過交換分割數組,使得這個數組“部分有序”這么說有點抽象,其實就是找出一個分割點,把數組分割后左邊的都比右邊的小。對於上面的例子,在第一次分割后可能是{2,4,1,3,5,6}這個就是一個分割的數組,雖然這和你想到的結果可能不同,但是這就是一種可能的結果,這取決於你的算法怎么實現。
二、雙指針應用
下面給出一種快排算法很常用的實現方式——雙指針
1、定義兩個指針分別指向數組的下界(left)和上界(right),定義一個temp用於存放A[1]的值。注:以下用*left和*right表示元素值
2、只要*right大於temp就讓right--(左移),當*right小於等於temp時,就把*right賦值到left處
3、開始循環left,只要*left小於temp就讓left++(右移),當*left大於temp時,就把*left賦值到right
4、當left<right時執行2、3步驟,跳出循環時就把temp放到right處
下面給出快排代碼
對於快速排序,大佬左呈雲給出過更好的快速排序算法,不過對於考試來說這個算法足夠了。