快速排序簡介:快速排序是另一種基於分治技術的重要排序演算法,不像合併排序是按照元素在陣列中的位置對他們進行劃分,快速排序通過元素的值對它們進行劃分,劃分是對陣列中元素的重新排列,使得某一元素左邊的元素都小於等於該元素,而右邊的元素都大於等於該元素。
顯然,建立劃分後,a【s】就已經位於在它有序陣列中的最終位置,接下來,對兩邊的陣列分別進行排序,同樣的方法。
下面是快速排序演算法的偽**
}在劃分階段的時候,我們只用最簡單的策略—選擇子陣列的第乙個元素,即p=a【l】;
l兩次掃瞄都停止後,取決於掃瞄的指標是否相交,會發生三種情況,如果i如果掃瞄的指標相交,也就是說i>j,把中軸和a【j】交換以後,可以得到陣列的乙個劃分
最後如果掃瞄指標停下來指向的是同乙個元素,i==j,被指向的元素的值一定是等於p,因為也建立了乙個陣列的劃分,**點的位置s=i=j;
下面是劃分實現的偽**
c語言實現
在這樣的演算法下,下標i可能會越過子陣列的邊界,可以每次對下標加一的時候就檢查下標越界的可能性,還有另外一種方法,為陣列a【0,n-1】新增乙個限位器,防止i越過n這個位置。int
partition
(int a,
int l,
int r)
while
(a[i]
while
(a[j]
>p)
;swap
(a,i,j);}
while
(i;swap
(a,i,j)
;swap
(a,l,j)
;return j;
}
新增的**如下
完整c語言實現
#include
void
swap
(int
* a,
int i,
int j)
intpartition
(int a,
int l,
int r)
while
(a[i]
while
(a[j]
>p)
;swap
(a,i,j);}
while
(i;swap
(a,i,j)
;swap
(a,l,j)
;return j;
}void
quicksort
(int a,
int l,
int r)
}int
main()
;quicksort
(a,0,3
);for(i=
0;i<
4;i++
)return0;
}
基礎排序演算法 快速排序
快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。首先,快速排序需要選擇乙個x,這個數很多人稱為基準。剛開始的時候選擇 a 0 當x,讓i l,j r 剛開始的時候l和r分別為最左邊和最右邊。1 讓j減小,直到遇到 i 或者找到乙個小於...
演算法基礎 快速排序
要求 10分鐘內寫出快排!之前筆試用到排序演算法,總是想用快排但是又不能在規定時間寫出來,歸根到底還是快排的邏輯步驟沒有搞清,所以才導致每次失敗!徹底搞清快排動作邏輯,這樣即使長時間不用也能臨時寫出來!思路 1.就像選擇排序每排一次序排好最小 大值一樣,快速排序每排一次序 會 將中軸值 預設取陣列第...
快速排序演算法 基礎
快速排序的演算法的核心思想是設定乙個值,把比這個值大的往右 扔 比這個值小的往左 扔 陣列快速排序的過程 設定兩個變數i j,排序開始時 i 0,j n 1 n為排序總數 以陣列中的第乙個元素作為比較的值,賦給變數key,即key a 0 首先從j往前搜尋,即從後往前 j 找到第乙個小於key的值a...