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

來源:互聯網
上載者:User

標籤:mystra   編程演算法   最小的k個數   代碼   c   

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





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.