快速排序方法的簡單解釋快速排序方法的時間複雜度為On2nn

2021-03-10 02:23:38 字數 2351 閱讀 5968

1樓:匿名使用者

快速排序的原理和實現(純白話文口述)

看看這個部落格,講的很透徹,通俗易懂,望對你有用

2樓:

快排的bai思想是(假設都是從du小到大排列):選一zhi個值作為「軸dao值」,所有小於軸值的都移動內到軸值左邊容,所有大於軸值的都移動到軸值右邊。這一步是讓數列變得較為有序

然後分別再對軸值的左邊、右邊分別進行快排,一步一步提高整個數列的有序程度,直到最後完全有序。

軸值的選取有多種方式,這裡就假設是選正中間的乙個70,75,82,90,23,16,10,68選擇軸值 90,排列後得到:

70,75,82,23,16,10,68,(90)括號括起來的我表示是軸值,這裡運氣不好,軸值選中了乙個最大的下面對軸值左邊排序,在選擇軸值為23:

16,10,(23),70,75,82,68再分別對16, 10 和 70,75,82,68進行排序一般快排在待排序的數字個數較少時,會選取其它排序來進行排列,比如插入排序。這裡16,10數字個數已經太少,用插入排序排成10, 16

然後對 70,75,82,68進行排序……整個排序過程就這樣

3樓:對抗a范越

最快的是二分

法(運算速度最快),最簡單的事冒泡法。

二分法為例:從專兩端選取各自草中間屬靠攏,每次排除最大的,或者最小的。這種方法在演算法上是較快的。

冒泡法就是:從[0]到[n],第一次讓[0]和後面的所有數字相比較,小的就換給[0]。第二次[1]和後面的比較小的就換給[1]………………以此類推,得出從小到大的排列了……他和沉底法是一樣的道理只不過乙個向上乙個向下

4樓:w與

#include

int cmp(const void*x,const void*y)int main()

;qsort(a,8,sizeof(int),cmp);

for(i=0;i<8;i++)

printf("%d\n",a[i]);

return 0;

}qsort中的

dua表示陣列名名字zhi

也是陣列第乙個元素

dao的位址,8表示待排元素的個內數,sizeof(int)表示元素型別,如果是char陣列,

容就用sizeof(char),cmp是個函式,返回兩兩數的差,這樣是遞增排序,若要遞減,把cmp的return相減的兩個數調換即可

快速排序方法的時間複雜度為o(n^2)=n(n-1)/2.

5樓:匿名使用者

1)對於你的問題簡單解釋如下:

理論計算機研究中,衡量演算法一般從兩個方面分析:時間複雜度和空間複雜度。空間複雜度跟時間複雜度是類似的,下面簡單解釋一下時間複雜度:

對於乙個資料規模為n的問題,解決該問題的演算法所用時間可以用含有n的函式t(n)來表示。對於絕大多數情況,我們只需要了解演算法的一般效能而不考慮細節,也就是說,我們只關心函式t(n)的表示式的形式,而不關心表示式的常數係數等與資料規模沒有關係的量值。對於函式t(n),我們又進一步將它簡化為o(n),即只考慮演算法平均執行時間的「瓶頸」,也就是t(n)表示式中,關於變數n增長最快的哪一項。

比如下面的**:

for(int i=1; i<=n*2; i++)for(int j=1; j<=n; j++)// do something here

那麼這個演算法的時間複雜度就是o(n^2),因為它有兩層迴圈,每層迴圈的資料規模都是n。注意第一層迴圈(外迴圈)要迭代n*2次,則實際上t(n)=2*n*n,而對於o(n)來說,我們忽略了常數2,只保留了n^2。這就是大o記法的乙個概括,並不精確。

對於時間複雜度的更精確、深入的解釋,可以自己查閱《演算法導論》第一章。

2)更正你的問題:快速排序演算法的時間複雜度應該為o(n lg n)。注意三種時間複雜度符號表示的不同意義!

英文本母o代表的是平均執行時間,因此對於快速排序來說應該是o(n lg n)。而使用下界函式omega或者上界函式theta則分別表示演算法執行的最快和最慢時間。對於未使用隨機化的快速排序,理論上可以證明,存在某一方法構造出一組資料使快速排序「退化」成平方複雜度演算法即theta(n^2)。

但是對於其o(n)表示法應該為o(n^2)。

6樓:匿名使用者

n 趨於無窮大時無窮大的階數。

同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。

電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。

使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。

C語言快速排序比較次數問題c語言,快速排序,在最壞條件下需要比較的次數為多少

你可以用氣泡排序法自己試一試 目的 按要求從大到小或從小到大排序。基本思路 對尚未排序的各元素從頭到尾依次依次比較相鄰的兩個元素是否逆序 與欲排順序相反 若逆序就交換這兩元素,經過第一輪比較排序後便可把最大 或最小 的元素排好,然後再用同樣的方法把剩下的元素逐個進行比較,就得到了你所要的順序。可以看...

為什麼快速排序是不穩定的排序法,為什麼快速排序是乙個不穩定的排序法?

在此先簡單闡述 復一下快 制速排序的具體做法 設定需要排序序bai列du第乙個數 字為關鍵字p 也叫樞zhi軸 同dao時設定兩個指標high和low,初始狀態時,low指向p,high指向序列中最後乙個數 首先從high所指位置起向前找第乙個小於關鍵字p的數字,並與p相互交換位置 然後從low所指...

快速排序,希爾排序和堆排序的平均時間複雜度都是O nlog2n ,為什麼說快速排序是最快的

快速排序是用遞迴的思想,用棧來儲存資料,它第n趟最多要確定2 n個數的最終位置。它使用的空間是最多的,用空間換取了時間。例如 快排只是內排序演算法啊,而且在內排序中也並不是最快的,只是快排在大多數情況下效果很好,因為一般的無序元素不會是完全或者近似倒序的。每種排序都有它的優勢。為什麼快速排序比堆排序...