中位數之第K小的線性選擇演算法(續)

2021-05-28 09:59:12 字數 1007 閱讀 6463

前一段時間翻譯了中位數之第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...