一组N个数输出第k个最大数

一组N个数输出第k个最大数Posted on

一组N个数输出第k个最大数, 这个问题看起来简单,但研究的话还是很有意义。

1.N个数据保存的一个数组里面的,大到小排序,把第k个输出。

2.N个数据保存的一个数组里面的,服务器空间,前k个数大到小排序,网站空间,后面的数一个个k比较,美国服务器,比k大互换, 最后把k输出。

3.直接用 qsort() 库函数。

第一种方法数据量比较大的时候明显慢很多。

1 View Code * ============================================================================= 4 *Filename: 一组N个数输出第k个最大数.c 5 * 6 * Description: 一组N个数输出第k个最大数 7 * 8 *Created: 08/26/2012 04:58:17 PM 9 *Compiler: gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 10 * 11 *Author: Bakhtiyar Ghulam (Uyghur), bakhtiyar108@gmail.com 12 * 13 * =============================================================================#include <stdio.h> 16 #include <stdlib.h> 17 #include <time.h>MAX_INT_LEN 32767 20 #define MAX_NUM9999999FindIndexSort_1(unsigned int * input, unsigned int len, unsigned int find); 23 void FindIndexSort_2(unsigned int * input, unsigned int len, unsigned int find);* p1, const void * p2);main(int argc, char * argv[]) 27 { 28unsigned int InputsN = 0L; 29unsigned int k = 0L; 30unsigned int index;);, & InputsN); 34if (0 > InputsN || MAX_NUM < InputsN) 35 {); 37 exit(EXIT_FAILURE); 38 });, &k); 42if (0 >= k || InputsN < k) 43 {); 45 exit(EXIT_FAILURE); 46 }unsigned int InputArrVLA[InputsN];srand((unsigned int) time(0)); 53for (index = 0; index < InputsN; index++) 54 { 55InputArrVLA[index] = rand() % MAX_INT_LEN + 1; 56 }FindIndexSort_2(InputArrVLA, InputsN, k);qsort(InputArrVLA, InputsN, sizeof(unsigned int), mycomp);, k, InputArrVLA[k – 1]);; 68 }FindIndexSort_1(unsigned int * input, unsigned int len, unsigned int find) 72 { 73unsigned int InIndex, OutIndex; 74unsigned int tmp;(OutIndex = 0; OutIndex < len – 1; OutIndex++) 77 { 78for (InIndex = OutIndex + 1; InIndex < len; InIndex++) 79 { 80if (input[OutIndex] < input[InIndex]) 81 { 82tmp = input[OutIndex]; 83input[OutIndex] = input[InIndex]; 84input[InIndex] = tmp; 85 } 86 } 87 }, find, input[find – 1]); 90 }FindIndexSort_2(unsigned int * input, unsigned int len, unsigned int find) 95 { 96unsigned int InIndex, OutIndex, index; 97unsigned int tmp;(OutIndex = 0; OutIndex < find – 1; OutIndex++)100 {101for (InIndex = OutIndex + 1; InIndex < find; InIndex++)102 {103if (input[OutIndex] < input[InIndex])104 {105tmp = input[OutIndex];106input[OutIndex] = input[InIndex];107input[InIndex] = tmp;108 }109 }110 }(index = find – 1; index < len; index++)113 {114if (input[find – 1] < input[index])115 {116tmp = input[find – 1];117input[find -1] = input[index];118input[index] = tmp;119 }120 }, find, input[find – 1]);123 }mycomp(* p2)127 {128const unsigned int * a1 = (const unsigned int *) p1;129const unsigned int * a2 = (const unsigned int *) p2;(*a1 > * a2)132 {}(*a1 == *a2)136 {;138 }{;142 }143 }

你曾经说,最大的愿望,

一组N个数输出第k个最大数

相关文章:

你感兴趣的文章:

标签云: