程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 編程算法 - 最小的k個數 代碼(C)

編程算法 - 最小的k個數 代碼(C)

編輯:關於C語言

最小的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 


 

/

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved