1. 程式人生 > >在集合中查找前k個最小的數

在集合中查找前k個最小的數

swa n) print style swap fin ++ sizeof out

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define SIZE 10
 5 
 6 int * k_thSmallest(int * arr, int len, int k_len);
 7 
 8 void find(int* arr, int low, int high, int k_len);
 9 
10 void swap(int * a, int *b);
11 
12 void printArr(int * arr, int len);
13 
14 int main()
15 {
16     int
arr[SIZE] = { 54,5,19,7,49,23,38,16,9,43 }; 17 int k_len = 4; 18 int* outArr = k_thSmallest(arr, SIZE, k_len); 19 printArr(outArr, k_len); 20 free(outArr); 21 return 0; 22 } 23 24 void printArr(int * arr, int len) 25 { 26 for (int i = 0; i < len; i++) 27 printf("%d
", arr[i]); 28 printf("\n"); 29 } 30 31 void swap(int * a, int *b) 32 { 33 int temp = *a; 34 *a = *b; 35 *b = temp; 36 } 37 38 void find(int* arr, int low, int high, int k_len) 39 { 40 int pivot = arr[high]; 41 int j = low; 42 for (int i = low; i <= high; i++) 43 {
44 if (arr[i] <= pivot) { 45 swap(&arr[i], &arr[j]); 46 j++; 47 } 48 } 49 j--; 50 if (j == k_len) 51 return; 52 else if (j > k_len) 53 find(arr, low, j - 1, k_len); 54 else find(arr, j + 1, high, k_len); 55 } 56 57 int * k_thSmallest(int * arr, int len, int k_len) 58 { 59 find(arr, 0, len - 1, k_len); 60 int* result = (int*)malloc(k_len * sizeof(int)); 61 for (int i = 0; i < k_len; i++) 62 result[i] = arr[i]; 63 return result; 64 }

在集合中查找前k個最小的數