求第K大的数~~
来源:互联网 发布:软件商机 编辑:程序博客网 时间:2024/05/01 10:02
已知n个数字各不相同,求其中第k大的数是多少?(1≤k≤n≤10000)
这是一道简单的试题,我们完全可以套用常用的快速排序模型来解决,即对所有数字进行排序,然后取出第k大的数字输出即可,该算法的时间复杂度为O(nlog2n)
快速排序的基本思想关键在于不斷调整使分治点左边的数不大于(或不小于)分治点,右边的数不小于(或不大于)分治点。
一般快速排序,当找到一个分治点x,序列就以x为分治点,分成左右两部分。
假设每次找到的分治点接近中点,那么,其算法的时间代价大致为:n+n/2+n/4+n/8+…=2n.也就是说改进后的算法的时间复杂度为O(n).
namespace 求第k大的数
{
class Program
{
static int maxn = 10001;//序列长度的上限
static int[] arr = new int[maxn];//序列
static void Main(string[] args)
{
int k, n;//序列长度为n,被寻找的数的大小为k
Console.WriteLine("输入序列的长度");
n = int.Parse(Console.ReadLine().Trim());
Console.WriteLine("请输入序列:");
for (int i = 1; i <= n; i++)
{
arr[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("您要寻找第几大的数?");
k = int.Parse(Console.ReadLine());
sort(1,n,k);
}
static void sort(int b_low, int b_high, int k)
{
int low = b_low, high = b_high;
int mid = (low + high) / 2;
int temp;
while (low < high)
{
while (low < mid)
{
if (arr[low] > arr[mid])
{
//swap(arr + low, arr + mid);
temp = arr[low];
arr[low] = arr[mid];
arr[mid] = temp;
mid = low;
low += 1;
break;
}
else
{
low++;
}
}
while (mid < high)
{
if (arr[high] < arr[mid])
{
//swap(arr + high, arr + mid);
temp = arr[high];
arr[high] = arr[mid];
arr[mid] = temp;
mid = high;
high -= 1;
break;
}
else
{
high--;
}
}
}
if (mid == k)
Console.WriteLine(arr[mid]);
else if (mid < k)
{
low = mid;
high = b_high;
sort(low, high, k);
}
else if (mid > k)
{
high = mid;
low = b_low;
sort(low, high, k);
}
}
}
}
- 求第K大的数~~
- 【算法】求第k大的数
- 求数组第K大的数
- 求一列数的第k大的数
- 求数组中第k大的数的位置
- 求一个数组的第K大的数
- 求n个数中第k大的数、前K大的数、快速排序
- 求一个数组中前K大的数或者第K大的数
- 二分求两个有序数组第k大的数
- 求第K大的数 亚洲网络赛
- 树状数组 求第K大的数 Swun1012
- hdu(4006)优先队列求第K大的数
- hdu 4006 求第K大的数
- 用堆实现求第K大的数
- 8.2.2(求第k大的数)
- 求无序数组第K大的数
- hdu 4006 求第k大的数
- 求数组中第k大的数
- 显式注释会被JSP引擎解释(由于忽略了这个问题,今天调试jsp 页面时浪费了很多时间)
- 框架标签
- Java的IO实例
- ABAP 常用FUNCTION集锦(转)
- Blog转移到新空间 andy.yoyopan.net
- 求第K大的数~~
- 利用 netbeans 开发 php
- WEB安全:session fixation的防范
- 去掉PhotoShop启动时弹出的"无法启动 Adobe Updater"警告
- 圣诞节
- Code::Blocks(MinGW)编译资源文件时中文乱码的解决方案及补充
- Windows 下 Fluent 启动脚本
- pku 3635 Full Tank? 优先队列+BFS
- 加我为好友