多少得有点彩头才有动力嘛.你这帖连 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 编辑 ]