快速排序-随机选择,寻找最小的第K个数
来源:互联网 发布:最好的中文编程语言 编辑:程序博客网 时间:2024/05/02 20:18
#include "stdafx.h"
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
int myrand(int p,int r)
{
int size= r-p;
return p+rand()%size;
}
void swap(int &a,int &b)
{
int temp=b;
b=a;
a=temp;
}
int partition(int arr[],int p, int r)
{
int x=arr[r];
int i=p-1;
for(int j=p;j<=r-1;j++)
{
if(arr[j]<=x)
{
i=i+1;
swap(arr[i],arr[j]);
}
}
swap(arr[i+1],arr[r]);
return i+1;
}
int randomizedpartition(int arr[],int p, int r)
{
int index=myrand(p,r);
swap(arr[index],arr[r]);
return partition(arr,p,r);
}
int randomizedselect(int arr[],int p ,int r, int k)
{
if(p==r) return arr[p];
int q=randomizedpartition(arr,p,r);
int m=q-p+1;
if(k==m) return arr[q];
else if(k<m)
return randomizedselect(arr,p,q-1,k);
else if(k>m)
return randomizedselect(arr,q+1,r,k-m);
}
int main()
{
int array[10]={33,22,10,45,67,8,6,23,4,78};
cout<<randomizedselect(array,0,9,6)<<endl;
return 0;
}
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
int myrand(int p,int r)
{
int size= r-p;
return p+rand()%size;
}
void swap(int &a,int &b)
{
int temp=b;
b=a;
a=temp;
}
int partition(int arr[],int p, int r)
{
int x=arr[r];
int i=p-1;
for(int j=p;j<=r-1;j++)
{
if(arr[j]<=x)
{
i=i+1;
swap(arr[i],arr[j]);
}
}
swap(arr[i+1],arr[r]);
return i+1;
}
int randomizedpartition(int arr[],int p, int r)
{
int index=myrand(p,r);
swap(arr[index],arr[r]);
return partition(arr,p,r);
}
int randomizedselect(int arr[],int p ,int r, int k)
{
if(p==r) return arr[p];
int q=randomizedpartition(arr,p,r);
int m=q-p+1;
if(k==m) return arr[q];
else if(k<m)
return randomizedselect(arr,p,q-1,k);
else if(k>m)
return randomizedselect(arr,q+1,r,k-m);
}
int main()
{
int array[10]={33,22,10,45,67,8,6,23,4,78};
cout<<randomizedselect(array,0,9,6)<<endl;
return 0;
}
0 0
- 快速排序-随机选择,寻找最小的第K个数
- 快速排序及寻找最小的k个数
- 寻找最小的k个数(先快速排序,然后输出前k个元素)
- 数据结构学习笔记5-寻找最小的k个数(选择排序和堆排序)
- 寻找数组中最小的k个数 "利用快速排序的思想"
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的K个数
- 寻找最小的k个数
- 寻找最小的K个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的k个数
- 寻找最小的 k 个数
- 四种策略防止用户将表单重复提交
- gcc源代码分析,expand_expr_stmt()函数
- vmware下安装centos x86_64出现“kernel requires an x86_64 cpu, but only detected ”
- 49-一个偶数总能表示为两个素数之和
- windows安装程序无法将windows配置为在此计算机的硬件上运行
- 快速排序-随机选择,寻找最小的第K个数
- android ViewHolder模式超简洁写法
- HTML5画布像素图像的焦点
- 几种能力
- Multisim出现步长问题 step time
- KVC KVO总结
- 《CLR via C#》读书笔记之:类型基础
- HTML5画布模式教程
- openCV matchTemplate函数不同参数对应的相似性度量