快速排序法是基於分治思想,從序列陣列中隨機選取主元pivot作為分界元素,然後將大於等於主元pivot的元素放到右邊,小於等於主元pivot的元素放到左邊,則主元所在的位置,是乙個有序的位置,即主元位置已經處於有序位置。每一次遍歷操作就是找到分界元素的位置過程。主元把陣列分成了兩半部分。把乙個大的陣列通過主元分割成兩小部分的這個操作,我們也稱之為分割操作(partition)。然後通過遞迴的方式,對左右兩部分採取同樣的方式,每次選取乙個主元 元素,使他處於有序的位置,遞迴的出口就是陣列成為1個元素或者0個元素。因此主關鍵的任務是如何分割操作partition。
// 快速排序法1(單方向調整)
intpartition
(int arr,
int left,
int right)
} arr[right]
= arr[i]
; arr[i]
= pivot;
return i;
}// 雙方向調整(假定主元還是在第乙個元素)
intpartition2
(int arr,
int left,
int right)
while
(i <= j && arr[j]
>= pivot)
if(j <= i)
else
} arr[left]
= arr[j]
; arr[j]
= pivot;
return j;
}void
quicksort
(int arr,
int left,
int right)
}
排序演算法 快速排序 C
單向掃瞄就地重排 int partitation 1way int array,int nidxleft,int nidxright return nidxsmall 雙向掃瞄就地重排 int partitation 2way int array,int nidxleft,int nidxright...
快速排序演算法C
快速排序演算法 c 實現 評注版 經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20...
快速排序演算法(C)
sort快排函式的基本版,效率n logn,快排的完全版就是在遞迴之中夾雜對序列的預判斷,最優的選擇排序方法,快速排序演算法只是其中之一。簡單的說明一下快速排序的思想,對於乙個數列,首先選擇乙個基數 x 進行第一次排序,把比x 小的放在x左邊,大的放右邊 預設從小到大 例如 8 4 5 7 6 9 ...