博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找出无序数组中第k小的数
阅读量:7032 次
发布时间:2019-06-28

本文共 1202 字,大约阅读时间需要 4 分钟。

题目描述:

给定一个无序整数数组,返回这个数组中第k小的数。

 

解析:

最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(1)。使用快排的思想,但是每次只对patition之后的数组的一半递归,这样可以将时间复杂度将为O(n)。

 

代码实现:

#include 
#include
#include
#include
#include
using namespace std;void swap(int *p, int *q){ int t; t = *p; *p = *q; *q = t;}int findNumberK(vector
&vec, int k, int s, int e){ int roll = vec[s], be = 0, j = s; for(int i = s+1 ; i<= e ; i++) { if(vec[i] < roll) { j++; swap(&vec[i], &vec[j]); be++; } } swap(&vec[s], &vec[j]); if(be == k -1 ) return roll; else if (be < k - 1) { return findNumberK(vec, k - be - 1, j + 1, e); } else return findNumberK(vec, k, s, j - 1);}int main(){ vector
a; int temp, k; cout << "input data:" << endl; cin >> temp; while(temp != 0) { a.push_back(temp); cin >> temp; } cout << "input K: " << endl; cin >> k; int re = findNumberK(a , k, 0 ,a.size() - 1); cout << "Test Result: " << re << endl; sort(a.begin(), a.end(), less
()); cout << "real Result: " << a[k-1] << endl; return 0;}

 

执行效果:

 

 

 

转载地址:http://neual.baihongyu.com/

你可能感兴趣的文章
V2X项目小结
查看>>
学习笔记---乐观锁 悲观锁 死锁
查看>>
如何避免windows电脑假死机
查看>>
Kotlin整合Vertx开发Web应用
查看>>
在7层分发中,http,mysql是如何控制数据包的走向
查看>>
人生路漫漫
查看>>
双机热备软件在Linux环境下的配置方法
查看>>
美丽的英文诗句【2】
查看>>
DATAGUARD ORA-01274 ORA-01111处理
查看>>
oracle 11g for suse 11g sp2
查看>>
Java基础学习总结(8)——super关键字
查看>>
洛谷1156 垃圾陷阱
查看>>
Java基础学习总结(10)——static关键字
查看>>
Centos6编译安装LAMP(fast-cgi方式)加速的WordPress应用
查看>>
php实现的一个ajax分页数据
查看>>
Linux实用工具
查看>>
Oracle 笔记(九)、触发器
查看>>
JNDI学习总结(1)——JNDI入门简介
查看>>
HDU 4276
查看>>
Distributed Configuration Management Platform(分布式配置管理平台)
查看>>