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 }