1 #include <io_utils.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 #include <time.h>
5 #include <string.h>
6
7 void SwapString(char * *first, char * *second) {
8 char * temp = *first;
9 *first = *second;
10 *second = temp;
11 }
12
13 void Shuffle(char * *array, int length) {
14 srand(time(NULL));
15
16 for (int i = length - 1; i > 0; --i) {
17 int random_number = rand() % i;
18 SwapString(array + i, array + random_number);
19 }
20 }
21
22 char * *Partition(char * *low, char * *high) {
23 char * pivot = *(low + (high - low) / 2);
24 char * *p = low;
25 char * *q = high;
26
27 while (1) {
28 while (strcmp(*p,pivot) < 0) p++;
29 while (strcmp(*q, pivot) > 0) q--;
30
31 if (p >= q) break;
32 SwapString(p, q);
33 }
34
35 return q;
36 }
37
38 void QuickSort(char * *low, char * *high) {
39 if (low >= high) return;
40 char * *partition = Partition(low, high);
41 QuickSort(low, partition - 1);
42 QuickSort(partition + 1, high);
43 }
44
45 int main() {
46 char *string = "Hello World!";
47 PRINT_INT(strlen(string));
48 //PRINT_INT(strnlen_s(string, 100)); // C11, msvc
49 //PRINT_INT(strnlen(string, 100)); // gcc
50
51 char *left = "Hello World!";
52 char *right = "Hello C Programmers!";
53
54 PRINT_INT(strcmp(left, right));
55 PRINT_INT(strncmp(left, right, 5));
56
57 // int array[];
58 char *names[] = {
59 "Cindy",
60 "Don",
61 "Andrey",
62 "Elsa",
63 "George",
64 "Frank",
65 "Benny",
66 };
67
68 QuickSort(names, names + 6);
69 PRINT_ARRAY("%s, ", names, 7);
70 return 0;
71 }