找第K大的数

来源:互联网 发布:数据分析导论 编辑:程序博客网 时间:2024/05/09 02:24
#include <iostream>using namespace std;//快速排序的划分函数int partition(int a[], int l, int r){int i, j, x, temp;i = l;j = r + 1;x = a[l];//将>=x的元素换到左边区域//将<=x的元素换到右边区域while (1){while (a[++i] > x);while (a[--j] < x);if (i >= j) break;temp = a[i];a[i] = a[j];a[j] = temp;}a[l] = a[j];a[j] = x;return j;}//随机划分函数int random_partition(int a[], int l, int r){return partition(a, l, r);//调用划分函数}//线性寻找第k大的数int random_select(int a[], int l, int r, int k){if (l > r)return -1;int p = random_partition(a, l, r);int no = p - l + 1;if (no != k){if (no > k){random_select(a, l, p-1, k);}else{random_select(a, p+1, r, k-no);}}else{return a[p];}}int main(){int a[] = { 1, 2, 7, 4, 6, 6, 7, 8, 10, 4 };for (int i = 0; i < 10; i++){cout << random_select(a, 0, 9, i+1) << endl;}return 0;}

0 0
原创粉丝点击