找出第K小的数
来源:互联网 发布:智慧记同步不了数据 编辑:程序博客网 时间:2024/05/01 12:31
题目描述:
查找一个数组的第K小的数,注意同样大小算一样大。
如 2 1 3 4 5 2 第三小数为3。
输入:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出:
输出第k小的整数。
样例输入:
6
2 1 3 5 2 2
3
样例输出:
3
代码:
void swap(int* e1,int* e2);
int searchk(int arry[],int n,int k);void quicksort(int arry[],int left,int right);
//找出第K小的数
void main()
{
int n,k;
int arry[100];
int i;
int ans;
printf("输入n:");
scanf("%d",&n);
printf("输入数组:");
for(i=0;i<n;i++){
scanf("%d",&arry[i]);
}
printf("输入k:");
scanf("%d",&k);
ans=searchk(arry,n,k);
printf("第K小数为:%d\n",ans);
}
int searchk(int arry[],int n,int k)
{
int i,count=1;
quicksort(arry,0,n-1);
for(i=1;i<n;i++){
if(arry[i-1]!=arry[i]) count++; //不相同的才计数
if(count==k) break;
}
return arry[i];
}
void quicksort(int arry[],int left,int right) //快排
{
if(left>=right) return;
int l=left;
int r=right;
int i=l+1;
int tmp=arry[l];
while(i<=r){
if(arry[i]<tmp) swap(&arry[i],&arry[l++]) ;
if(arry[i]>tmp) swap(&arry[i],&arry[r--]);
if(arry[i]==tmp) i++;
}
quicksort(arry,left,l-1);
quicksort(arry,r+1,right);
}
void swap(int* e1,int* e2)
{
int tmp=*e1;
*e1=*e2;
*e2=tmp;
}
阅读全文
0 0
- 找出第K小的数
- 选择问题(找出第k小的数)
- 找出第K大的数
- 找出第k大的数
- 找出第k大的数
- 找出第K大的数<数组>
- 找出第k大的数
- 编程珠玑 第十一章 第9题 从数组中找出第K小的数
- 第k小的数
- 第k小的数
- 在两个已经排好序的数组里找出第K小的数
- 在两个已经排好序的数组里找出第K小的数
- 算法导论:快速找出无序数组中第k小的数
- 给定一组数,要求从中找出第k小的元素
- 找出一段数中的第K最大的数:k_Max
- 无序数组找出其中的第K大的数
- 找出数组中第k大小的数
- 找出第k大的数[No. 64]
- 二分图多重匹配(HDU 2255)
- Win10 上 Sql Server 2016 安装
- 几种UDP网络库的对比 Raknet,UDT,ENet,kcp
- 2139图结构练习——BFS——从起始点到目标点的最短步数
- redis必杀命令:列表(List)
- 找出第K小的数
- (1) linux安装单个zookeeper服务配置
- WPF 播放声音的三种方法
- gclient 设置代理问题
- JNLP文件详细说明
- Cpp -类的对象和类的指针的区别
- TP5 --我知道 重定向缺少index.php报错(No input file specified)
- jQuery事件绑定on()、bind()与delegate() 方法详解
- Android Banner轮播图 recyclerView添加headVie