前一段時間翻譯了中位數之第k小的線性選擇演算法,由於翻譯水平有限,感覺對上文不是很滿意。不過中位數演算法的大致意思我想已經在上文中說的比較清楚了,在這我就不多說了。本文的主要目的是對於演算法的實現。
最近抽了些時間把該演算法做了,基本是按照上文的思路走的。突然心情激動了一下,就想把**貼上來,主要目的還是想和大家交流。畢竟靠乙個人的力量想學好演算法那還真是有些難度的。
不浪費時間了,直接看**吧!
/*** 從array[left, right] 中找出第 k 小的數 ***/
int selection(int array, int left, int right, int k) if (left == right) int mid = partition(array, left, right); int len = mid - left; if ((k - 1) == len) else if ((k - 1) < len) else }
/** 對陣列進行一次劃分,[left, mid - 1] [mid] [mid + 1, right] ***/
int partition(int array, int low, int high) } swap(array, low, m); return m; }
int swap(int a, int i, int j)
測試:找出陣列中第k小元素
int main() ; int k; printf("please input k: "); scanf("%d",&k); printf("%d",selection(array, 0, 6, k)); return 0; }
測試截圖:編譯環境為codeblocks
中位數之第K小的線性選擇演算法(續)
前一段時間翻譯了中位數之第k小的線性選擇演算法,由於翻譯水平有限,感覺對上文不是很滿意。不過中位數演算法的大致意思我想已經在上文中說的比較清楚了,在這我就不多說了。本文的主要目的是對於演算法的實現。最近抽了些時間把該演算法做了,基本是按照上文的思路走的。突然心情激動了一下,就想把 貼上來,主要目的還...
中位數與第K小元素
演算法實際上是模仿快速排序演算法設計出來的,其基本思想也是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出來的子陣列之一進行遞迴處理 int randompartition int a,int l,int r tmp a i a i a r a r tmp return i randompa...
中位數與第K小元素
演算法實際上是模仿快速排序演算法設計出來的,其基本思想也是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出來的子陣列之一進行遞迴處理 int randompartition int a,int l,int r tmp a i a i a r a r tmp return i randompa...