中位数之第K小的线性选择算法(续)
2011-09-23 10:53
218 查看
前一段时间翻译了中位数之第K小的线性选择算法,由于翻译水平有限,感觉对上文不是很满意。不过中位数算法的大致意思我想已经在上文中说的比较清楚了,在这我就不多说了。本文的主要目的是对于算法的实现。
最近抽了些时间把该算法做了,基本是按照上文的思路走的。突然心情激动了一下,就想把代码贴上来,主要目的还是想和大家交流。毕竟靠一个人的力量想学好算法那还真是有些难度的。
不浪费时间了,直接看代码吧!
/*** 从array[left, right] 中找出第 k 小的数 ***/
/** 对数组进行一次划分,[left, mid - 1] [mid] [mid + 1, right] ***/
测试:找出数组中第K小元素
测试截图:编译环境为codeblocks
![](http://hi.csdn.net/attachment/201109/23/0_13167462565N5P.gif)
本文出自 “SuperFC之替天行道” 博客,请务必保留此出处http://fengchaokobe.blog.51cto.com/2246555/1201135
最近抽了些时间把该算法做了,基本是按照上文的思路走的。突然心情激动了一下,就想把代码贴上来,主要目的还是想和大家交流。毕竟靠一个人的力量想学好算法那还真是有些难度的。
不浪费时间了,直接看代码吧!
/*** 从array[left, right] 中找出第 k 小的数 ***/
int selection(int array[], int left, int right, int k) { if (left > right || (k - 1) > right - left) { return -1; } if (left == right) { return array[left]; } int mid = partition(array, left, right); int len = mid - left; if ((k - 1) == len) { return array[mid]; } else if ((k - 1) < len) { /*** 要找的数在左集合中 ***/ return selection(array, left, mid - 1, k); } else { /*** 要找的数在右集合中 ***/ return selection(array, mid + 1, right, k - len - 1); } }
/** 对数组进行一次划分,[left, mid - 1] [mid] [mid + 1, right] ***/
int partition(int array[], int low, int high) { int x = array[low]; int m = low; int i; for (i = low + 1; i <= high; i++) { if (array[i] < x) { swap(array, ++m, i); } } swap(array, low, m); return m; }
int swap(int a[], int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; return 0; }
测试:找出数组中第K小元素
int main() { int array[] = {3,7,9,4,2,8}; int k; printf("Please input k: "); scanf("%d",&k); printf("%d",selection(array, 0, 6, k)); return 0; }
测试截图:编译环境为codeblocks
![](http://hi.csdn.net/attachment/201109/23/0_13167462565N5P.gif)
本文出自 “SuperFC之替天行道” 博客,请务必保留此出处http://fengchaokobe.blog.51cto.com/2246555/1201135
相关文章推荐
- 中位数之第K小的线性选择算法(续)
- 中位数之第K小的线性选择算法
- 中位数之第K小的线性选择算法
- 《算法导论》读书笔记之第9章 中位数和顺序统计学 最坏情况是线性时间的选择算法
- 第九章 中位数和顺序统计量 9.2 期望为线性时间的选择算法
- 第九章中位数和顺序统计学 之 “寻找第i小元素之最坏情况线性时间的选择 最坏运行时间就为O(n)算法”
- 算法导论-第九章-中位数和顺序统计量:最坏情况为线性时间的选择算法C++实现
- 算法导论:第9章 中位数和顺序统计量_2最坏情况为线性时间的选择算法
- 算法导论:第9章 中位数和顺序统计量_1期望为线性时间的选择算法
- 算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),Golang(Go语言)实现
- 算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
- 算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
- 算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),Java实现
- 算法代码实现之选出第k小元素、中位数、最小的k个元素(线性复杂度),C/C++实现
- 线性选择序列第k小 / 中位数附近k个数
- 第九章 中位数和顺序统计量 9.2 期望为线性时间的选择算法
- [置顶] 递归与分治策略-2.9.2线性时间选择(取中位数的中位数基准)(第k小问题)
- 算法探究:线性时间选择问题
- 期望为线性时间的选择算法randomizedSelect
- 算法导论 最坏情况为线性时间的选择算法 9.3-8 9.3-9