查找一个无序数列中第k个大的元素
来源:互联网 发布:阿里云域名必须备案吗 编辑:程序博客网 时间:2024/05/03 21:01
今天面试面试官出了一道题:给你一个 无序int数组,让你查找出第K个大的元素(0<k<n)。小生惭愧当时没有想到一个好点的方法,现如今有一个方法可以解决此题。
现如今代码如下:(C++)#include <iostream>using namespace std;int FindNum(int *a, int left, int right, int k){ //以快速排序的思想解决此题。因为一趟快速排序可以找到一个元素最终的位置。 int low = left; int high = right; int temp = a[low]; int flag = 0;//标记若为0表示high指针往low端滑动,若为1表示low指针往high端滑动。 while (low < high) { if (0 == flag)//high指针往low端滑动 { if (a[high] > temp) { high--; } else { a[low++] = a[high]; flag = 1;//修改标记已指示下次滑动方向 } } else { if (a[low] < temp) { low++; } else { a[high--] = a[low]; flag = 0;//修改标记已指示下次滑动方向 } } } //一趟快速排序结束,则找出了temp元素所对应的位置low,如果k==low则,temp为第k个大的元素。 //如果K>low则进行递归调用FindNum(a, low+1, right, k). //如果K<low则递归调用FindNum(a, left, low-1, k). if (k == low) { return temp; } else if (k > low) { return FindNum(a, low+1, right, k); } else { return FindNum(a, left, low-1, k); }}int main(void){ int a[10] = {9, 4, 8, 2, 6, 1, 0, 3, 7, 5}; cout<<FindNum(a, 0, 9, 3)<<endl; return 0;}
- 查找一个无序数列中第k个大的元素
- 一个无序数组中第K大的元素
- 如何在N个无序数组元素中,查找第K大元素
- 无序n个元素中,寻找第K大的元素 O(n)
- 由无序数组中找到第K 大的元素
- 无序数组中找到第k大的元素
- 在一个无序数组中找到第K个最小或者最大的元素
- 【28】一个无序的序列查找第K大的数
- java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
- 查找数组中第K大元素
- 算法设计--查找无序数组中第K大的数字
- 查找--第K大的元素
- 查找第K大的元素
- 查找第 k 大的元素
- 在一个数组中查找最大的K个元素或者最小的K个元素
- 输入一个无序序列,输出第K大的数。
- 面试题—— 找出一个无序整型数组中第k大的数。
- 查找数组中第K大和第K小的元素
- 最大似然估计和最大后验概率
- 《响应式Web设计——html5和css3实战》读书笔记
- ext接受后台数据乱码问题的解决
- Android程序架构目录结构介绍
- 容灾系统简介
- 查找一个无序数列中第k个大的元素
- #pragma pack(push,1) & #pragma pack(pop)
- iOS编译ffmpeg1.2.1,使用kxmovie播放视频文件
- 字符串大小写互换(函数)
- c/c++连接mysql数据库
- IT求职准备 -2013
- DB文章收集
- WSAAsyncSelect()
- Resources for embedded SQL engine