快速排序 基於c 實現

2021-06-10 12:32:46 字數 953 閱讀 3325

快排的特點

最壞情況下,對n個數的排序所花的時間是o(n^2)。雖然這個結果比較差,但是快速排序卻是用於排序的最佳的實用選擇,因為它的平均效能相當好:期望的執行時間為o(nlgn),且o(nlgn)中的隱含因子比較小,另外,它還能夠就地排序(也就是不需要另外開闢乙個陣列空間來進行中間資料儲存),在虛存環境中也能很好的工作。

快排的原理

public static void quicksort(int arr, int p, int r)

}

/// /// 將陣列從下標p到r進行分解,返回乙個下標(記為q吧),

/// 在下標左邊的數均小於arr[q],右邊的數均大於arr[q]

///

///

///

///

///

public static int partition(int arr, int p, int r)

}tmp = arr[i + 1];

arr[i + 1] = arr[r];

arr[r] = tmp;

return i + 1;

}

關鍵點就在partition方法了,下面舉個例子來看看快速排序partition的流程:

相信看到這個執行過程後,已經基本理解了快速排序的思想了。現在給乙個思考題:

如果陣列p到r中的元素都相等,則partition的返回值是多少呢?怎樣才能讓它返回(p+r)/2呢?

基於C語言實現快速排序

快速排序的基本思想是 1 先從陣列中取出乙個數作為基準數。2 將小於或等於它的數全放到它的左邊,大於它的數全放到它的右邊。3 再對左右區間重複第 2 步,直到各區間只有乙個數。更易於理解的排序邏輯是 挖坑 遞迴 請移步此微軟大佬的文章 白話經典演算法系列之六 快速排序 快速搞定 時間複雜度 o n2...

快速排序 基於scala實現

快速排序由於排序效率在同為o n logn 的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想 分治法也確實實用.快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想...

排序 快速排序,C 實現

本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...