7 快速排序

2022-04-05 04:19:43 字數 1329 閱讀 4759

快速排序

快速排序是在實際中最常用的一種排序演算法,速度快,效率高。就像名字一樣,快速排序是最優秀的一種排序演算法。

思想 快速排序採用的思想是分治思想。portition

快速排序是找出乙個元素(理論上可以隨便找乙個)作為基準(pivot),然後對陣列進行分割槽操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值 都不小於基準值,  

如此作為基準的元素調整到排序後的正確位置。

遞迴快速排序,將其他n-1 個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正確位置,排序完成。

所以快速排序演算法的核心演算法是分割槽操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞迴.

#include using namespace std;

int portition(int a, int low, int high)

int aa = a[low];

a[low] = a[high];

a[high] = aa;

while(low

1. 優化選取的樞軸盡量將我們選取的數值  為中間點 

int portition(int a,int low, int high)

if(a[mid]>a[high])

if(a[mid]>a[low])

int temp = a[low];

while(low=temp)

int aa = a[low];

a[low] = a[high];

a[high] = aa;

while(low

int portition(int a, int low, int high)

a[low] = a[high];//優化

while(low

意思就是說我可以在前半段用遞迴qsort處理大於7,後面用insertsort 處理小型排序

#define max_length_insertsort 7 或者 50

void qsort(int a, int low, int high)

else }

void isort(int a, int n) }

while (low < high)

else

}

優化5:在一次分割結束後,可以把與key相等的元素聚在一起,繼續下次分割時,不用再對與key相等元素分割

概括:這裡效率最好的快排組合 是:三數取中+插排+聚集相等元素,它和stl中的sort函式效率差不多

注意:由於測試資料不穩定,資料也僅僅反應大概的情況。如果時間上沒有成倍的增加或減少,僅僅有小額變化的話,我們可以看成時間差不多.

CLRS筆記7 快速排序

quick sort原理很簡單,典型的分治法 1,分陣列a一分為二,比元素x小或等的子陣列和比元素x大的陣列 2,遞迴 子陣列遞迴分 3,合子陣列分好以後按序合併即可 用ruby和erlang實現quick sort實在簡潔 ruby def quick sort a x a.pop quick s...

演算法手記(7)快速排序

終於到了經典的快排了,作為20世紀科學和工程領域十大演算法之一,自60年代發明以來,一直吸引著一批批工程師和科學家對其改進,今天我們就分析快排演算法以及它的幾種改進方案。快速排序 概述 快速排序演算法也是基於分治思想的方案,與歸併排序不同的是,它是原地排序,同時可以將長度為n的陣列排序所需的時間和n...

演算法導論 第7章 快速排序

一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,排序最快,也只能達到o nlgn 二 快速排序演算法的描述 ...