编程算法 - 最小的k个数 代码(C)
来源:互联网 发布:数据详情分析的工具 编辑:程序博客网 时间:2024/05/07 18:24
最小的k个数 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy
题目: 输入n个整数, 找出其中的最小k个数.
使用快速排序(Quick Sort)的方法求解, 把索引值(index)指向前k个数.
代码:
/* * main.cpp * * Created on: 2014.6.12 * Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>#include <stdlib.h>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<k; ++i) {output[i] = input[i];}}int main(void){ int input[] = {4, 5, 1, 6, 2, 7, 3, 8}; int output[4]; GetLeastNumbers(input, 8, output, 4); for (int i=0; i<4; ++i) { printf("%d ", output[i]); } printf("\n"); return 0;}
输出:
1 2 3 4
6 0
- 编程算法 - 最小的k个数 代码(C)
- 编程算法 - 最小的k个数 红黑树 代码(C++)
- 算法---寻找最小的k个数
- 最小的K个数(算法)
- bfprt算法求最小的k个数
- 算法考题---最小的k个数
- 算法题/最小的k个数
- n个数中的最小的k个数的BFPRT算法
- 最小的K个数
- 最小的K个数
- 最小的K个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的k个数
- 最小的K个数
- 整理的Android开发资源
- http协议详解
- UVA 10318 - Security Panel dfs 剪枝
- 组合数快速计算-尽量小的数组
- linux下安装jdk
- 编程算法 - 最小的k个数 代码(C)
- 纯css实现小三角
- 精心收集的Hadoop学习资料(持续更新)
- 2014-06-29 日志
- Java泛型
- 学生信息管理系统技术点总结
- linux 把所有_smal.jpeg 改成_small.jpeg
- WebSocket简介
- Atitit.可视化编程jbpm6 的环境and 使用总结...