快速排序分析

2021-06-22 13:16:17 字數 1040 閱讀 2325

1.開篇

終於還是忍不住要學習一下演算法啦,該面對的還是要面對,不能逃避,不能把已經會的技能忘掉,那是一種對生命的摧殘和不仁。不要怕,只要每天都在進步,水滴石穿,終有破雲見天日的時刻。感慨寫完了,回到正題,分析快速排序。

2.原理

假設要排序的陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用陣列的第乙個數)作為關鍵資料(key=a[0]),然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。

第二趟就是以關鍵資料為分界點,對分界點兩邊的資料分別進行一趟快速排序,直到分界點兩邊沒有資料。**如下:

3.** //

#include "stdafx.h"

#include using namespace std;

void quicksort(int anum, int nlow, int nhigh);

void main()

; int nlen = sizeof(a)/sizeof(int);

quicksort(a, 0, nlen -1);

for (int i = 0; i < nlen; ++i) }

void quicksort(int anum, int nlow, int nhigh)

int nfirst = nlow;

int nlast = nhigh;

int key = anum[nfirst];

while (nfirst < nlast)

}for (; nfirst < nlast; ++nfirst)

} }

quicksort(anum, 0, nfirst);

quicksort(anum + nlast + 1, nlast + 1, nhigh - nlast - 1 );

}4.感想

記住原理之後,回過頭來想想,感覺蠻好玩,就像是在做遊戲。有點像篩子,把小的篩走,大的留下。不過用篩子,無法保留原來的大小順序,而用快速排序,卻可以哦。

5.時空

既然是演算法,就無法避免談論演算法的時間觀。

快速排序分析

首先簡單描述一下快速排序 1.快速排序樹不穩定的 由於關鍵字的比較與交換是跳躍進行的 2.時間複雜度為o n logn 最好情況為n logn 若陣列基本有序為n n 3.空間複雜度為logn 主要是遞迴造成的棧空間的使用,最好情況,遞迴樹的深度為log2n,其空間複雜度也就為o logn 最壞情況...

快速排序分析

一直想研究一下快速排序,今天剛好有空,寫一下自己對快速排序的認識。快速排序由於排序效率在同為o n logn 的幾種排序方法中效率較高,因此經常被採用。該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右...

快速排序分析

前言 剛剛學習到快速排序,快速排序是個基礎問題,去網上查了下,發現竟然沒有乙個讓人滿意的答案。就連為什麼快速排序比氣泡排序快這個基本的概念,也沒人說清楚。一般而言,網上對於為什麼快速排序比冒泡快,有兩種方向 1.算時間複雜度 2.二分法的優越性 對於這兩種解釋,明顯沒有從根本上觸及原理。對於1.算時...