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(" "); 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 }