设为首页 加入收藏

TOP

编程算法 - 最小的k个数 代码(C)
2015-01-22 21:26:16 来源: 作者: 【 】 浏览:51
Tags:编程 算法 最小 个数 代码

最小的k个数 代码(C)

?

?

?

题目: 输入n个整数, 找出其中的最小k个数.

?

使用快速排序(Quick Sort)的方法求解, 把索引值(index)指向前k个数.

?

代码:

?

/*
 * main.cpp
 *
 *  Created on: 2014.6.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include 
  
   
#include 
   
     int RandomInRange(int min, int max) { int random = rand() % (max-min+1) + min; return random; } void Swap (int* num1, int* num2) { int temp = *num1; *num1 = *num2; *num2 = temp; } int Partition(int data[], int length, int start, int end) { if (data == NULL || length <= 0 || start < 0 || end >= length) return -1; int index = RandomInRange(start, end); Swap(&data[index], &data[end]); int small = start-1; for (index = start; index < end; ++index) { if (data[index] < data[end]) { small++; if (small != index) Swap(&data[small], &data[index]); } } small++; Swap(&data[small], &data[end]); return small; } void GetLeastNumbers(int* input, int n, int* output, int k) { if (input == NULL || n <= 0 || output == NULL || k <= 0 || k>n) return; int start = 0; int end = n-1; int index = Partition(input, n, start, end); while (index != k-1) { if (index > k-1) { end = index - 1; index = Partition(input, n, start, end); } else { start = index + 1; index = Partition(input, n, start, end); } } for (int i=0; i
     
     输出:
     

?

?

1 2 3 4 


?

/

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇二叉查找树C语言实现 下一篇C和指针 学习笔记-3.数组与指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: