1.挑選乙個基準值
2.小於基準值的數放在大於基準值的數的左邊
3.將基準值放入中間,即兩種數分界的地方,根據挑選的基準值決定如何插入。
4.此時,基準值左邊的區間小於等於基準值,基準值小於等於右邊的區間,這三段有序,但內部無序,所以,將基準值左右兩端繼續進行快速排序,直到區間長度為1。是乙個遞迴的過程。
void quick_sort(int arr,int left,int right)
int i,j,temp;
i=left;
j=right;
temp=arr[left];//排序用的基準值,可自選
//比基準值大的放在右邊,小的放在左邊。
//可自選方法進行實現,最後結果要求比基準值小的在左邊,比基準值大的在右邊。
while(i!=j)
while(arr[i]<=temp && iif(i}
//i左邊的值都小於等於基準值,右邊都大於基準值
//進行過交換的地方一定滿足,所以迴圈終止情況只有i和j兩者相遇
//且在這種方法中,終止的位置一定是滿足小於等於,不一定滿足大於,因為是先從右往左進行查詢
swap(arr[left],a[i]);
//基準值左邊小於等於基準值,右邊大於等於基準值,繼續將左右區間進行快排。
quick_sort(arr,left,i-1);
quick_sort(arr,i+1,right);
}
快速排序及c 實現
乙個暑假的閒暇,玩的是舒服了,可是腦子裡的各種演算法卻忘了,果然程式設計是個靠保持狀態的活,昨天覆習了便快排,拿出來寫個部落格加深個印象。簡介 快排是基於分治模式的,它的平均時間複雜度為o nlgn 最壞複雜度是o n n 思想 快排的其基本思想是,陣列中先隨機找個主元 pivot element ...
快速排序原理及C 實現
原理 快速排序,說白了就是給基準資料找其正確索引位置的過程.如下圖所示,假設最開始的基準資料為陣列第乙個元素23,則首先用乙個臨時變數去儲存基準資料,即tmp 23 然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌 low指向起始位置,high指向末尾.首先從後半部分開始,如果掃瞄到的值大於基準資料就讓...
快速排序思想及C 實現
ste p1.step 1.step1.通過一趟排序把資料分成兩部分,其 中 color 其中一部分的所有資料都要比另一部分的所有資料小,基準資料 稱為樞軸 排在這兩個子串行的中間 s te p2.step 2.step2.對這兩個子串行遞 歸 color 遞迴地呼叫排序演算法 int partit...