**
快速排序是求職面試過程中問得最多的排序演算法,相較於冒泡、插入排序等,快排複雜一些,而相較於堆排序等較難的排序,它又相對簡單一些,下面開始介紹快排吧。
快排是利用分治的思想,從序列中取出乙個基準元素,將整個序列劃分成兩部分,保證左半部分元素均小於(或等於)基準元素,右半部分元素均大於(或等於)基準元素,再將左右兩部分子串行分別按照這個思路,取基準元素,將子串行的元素分成兩個子串行,直至序列不可再分,便保證了整個序列的有序性。
將乙個序列劃分成小於基準元素的左半部分和大於基準元素的右半部分的過程稱為一次劃分(partition),陣列上的劃分程式如下所示:
int quick_sort_partition(int data,int left,int right)
;node * partition(node * begin,node * end)
scanner=scanner->next;
}swap(flag->key,begin->key);
return flag;
}
選取煉表表頭元素作為基準元素,利用兩個指標 flag 和 scanner,指標 flag 記錄小於小於基準元素的位置,指標 scanner 向前掃瞄元素尋找小於基準的新元素,將較小的元素與 flag 指標指向的下乙個元素交換位置,並將 flag 指標指向新的位置。scanner 指標掃瞄到鍊錶尾部後,將 flag 指標的指向元素的值與 基準元素(煉表頭)的值交換,到此便完成了一次劃分,返回基準元素的新指標。
單鏈表上遞迴呼叫劃分函式完成快排如下程式所示:
void qiuck_sort_link(node * begin,node * end)
}
演算法基礎之排序 快速排序
上一節簡單介紹了一下常用的插入排序,這一節,我們來看看實際中針對大量資料最常用的快速排序演算法。快速排序演算法採用的是一種分治的策略,其的特點就是。快!演算法的平均時間複雜度為o nlog n 快速排序演算法處理公升序排序的思路大致如下 1 選中待排序陣列中最左端的數為參考數 2 從陣列的右端開始向...
基礎排序演算法之快速排序
基礎思想 分治 選首元素作為key值,迴圈比較,比其小的元素放左側,比其大的放右側 分成的兩個數列,遞迴重複上述步驟 include includeusing namespace std 快速排序 時間複雜度 o n log n 從數列取乙個數作為key值 一般取第乙個數 i 從右邊遍歷找到第乙個比...
基礎演算法之快速排序演算法
快速排序基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。比如序列 6,8,1,4,3,9 選取6為基準數key 不會變的 然後從右往左遍...