首页 新闻 会员 周边

一题算法题

0
悬赏园豆:10 [已关闭问题]

从1亿个整数中,找出最大的1万个,要考虑效率,怎么写?

 

网上的思路我也看了,但是我写不出来,哪位帮我写出来啊,万分感激

小手&冰凉的主页 小手&冰凉 | 初学一级 | 园豆:44
提问于:2010-05-29 17:15
< >
分享
其他回答(2)
0
小AI | 园豆:354 (菜鸟二级) | 2010-05-29 18:01
0

看我这篇,部分快速排序,有代码

http://www.cnblogs.com/eaglet/archive/2009/05/01/1447481.html

eaglet | 园豆:17139 (专家六级) | 2010-05-29 18:24
0

献丑了,写了个代码,这里代码只是用了15个元素作了个demo,10万个数据也一样的道理。代码如下

class Program
{
static void Main(string[] args)
{
int[] arr = { 1, 32, 43, 54, 2, 3, 5, 6, 4, 2, 7, 8, 9, 9, 0 };
QuickSort(arr,
0, arr.Length - 1);

int[] result = new int[5];
int j = 0;
for (int i = arr.Length - 5; i < arr.Length; i++)
{
result.SetValue(arr[i], j);
j
++;
}
}

public static void QuickSort(int[] array, int left, int right)
{
if (right - left <= 0) return;
int pivot = array[right];
int temp;

int leftPartition = left - 1;
int rightPartition = right;
while (true)
{
while (array[++leftPartition] < pivot) { }
while (rightPartition > 0 && array[--rightPartition] > pivot) { };
if (leftPartition >= rightPartition) break;
//元素交换
temp = array[leftPartition];
array[leftPartition]
= array[rightPartition];
array[rightPartition]
= temp;
}
//元素交换
temp = array[leftPartition];
array[leftPartition]
= array[right];
array[right]
= temp;
//递归调用部分
QuickSort(array, left, leftPartition - 1);
QuickSort(array, leftPartition
+ 1, right);
}
}
}

 

这个代码应该就能用的

西越泽 | 园豆:10775 (专家六级) | 2010-05-30 00:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册