多少得有点彩头才有动力嘛.你这帖连 1 分都不给,也太有点铁公鸡了吧.

写完才发现 要求 用链表实现

听楼主的话好像链表能优化, 我是想不明白..
程序代码:
#include <stdio.h>
#include <stdlib.h>
//对数组arr从下标left到right以arr[left]划分
//从大到小
int partition(int arr[], int left, int right)
{
int key = arr[left];
while(left < right)
{
//从right往左找到第一个大于 x 的数, 填到arr[left]中
while (left < right && arr[right] <= key)
right--;
arr[left] = arr[right];
//从left往右找到第一个小于 x 的数, 填到arr[right]中
while (left < right && arr[left] >= key)
left++;
arr[right] = arr[left];
}
arr[left] = key;
return left;
}
//得到数组中第k大的数
int getKmaxNum(int arr[], int size, int k)
{
//第k大的数在降序排列的数组中下标为 k-1
k--;
int left = 0, right = size - 1, pos;
for ( ; ;)
{
pos = partition(arr, left, right);
if (pos == k)
break;
if (pos > k)
{
right = pos - 1;
}
else
{
left = pos + 1;
k -= pos;
}
}
return arr[pos];
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[6] = {332,32,1,3,5,6};
printf("%d\n", getKmaxNum(arr, 6, 2));
return 0;
}
[ 本帖最后由 jimmywood 于 2010-3-3 17:18 编辑 ]








