Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_ELEMENT 99
- void quicksort_rec(int array[], int start, int end, int pivot);
- int partition (int array[], int start, int end, int pivot);
- void swap(int *origin, int *end);
- int medOfThree(int array[], int random_1, int random_2, int random_3);
- int main (int argc, char *argv[]) {
- int entry_element = 0, counter, entry_size = 0;
- int array[MAX_ELEMENT];
- printf("Enter data size: ");
- scanf("%d", &entry_size);
- printf("Enter data: \n");
- for (counter = 0; counter < entry_size; counter++) {
- scanf("%d", &array[counter]);
- }
- if (!strcmp(argv[1], "-pn")) {
- printf("Sorted with naive pivot:\n");
- quicksort_rec(array, 0, entry_size - 1, array[0]);
- } else if (!strcmp(argv[1], "-pm")) {
- printf("Sorted with median of three pivot:\n");
- int random_1 = rand() % (entry_size - 1);
- int random_2 = rand() % (entry_size - 1);
- int random_3 = rand() % (entry_size - 1);
- int median = medOfThree(array, random_1, random_2, random_3);
- quicksort_rec(array, 0, entry_size - 1, median);
- } else if (!strcmp(argv[1], "-pr")) {
- printf("Sorted with randomized pivot: \n");
- int random = rand() % (entry_size - 1);
- quicksort_rec(array, 0, entry_size - 1, array[random]);
- }
- for (counter = 0; counter < entry_size; counter++) {
- if (counter != entry_size - 1) {
- printf("%d ", array[counter]);
- } else {
- printf("%d\n", array[counter]);
- }
- }
- return EXIT_SUCCESS;
- }
- void quicksort_rec(int array[], int start, int end, int pivot) {
- if (start < end) {
- int pivot_qs = partition(array, start, end, pivot);
- quicksort_rec(array, start, pivot_qs - 1, pivot);
- quicksort_rec(array, pivot_qs + 1, end, pivot);
- }
- }
- int partition (int array[], int start, int end, int pivot) {
- int index_swap_1 = start - 1;
- for (int index_swap_2 = start; index_swap_2 <= end - 1; index_swap_2++) {
- if (array[index_swap_2] <= pivot) {
- index_swap_1++;
- swap(&array[index_swap_1], &array[index_swap_2]);
- }
- }
- swap(&array[index_swap_1 + 1], &array[end]);
- return index_swap_1 + 1;
- }
- void swap(int *origin, int *end) {
- int swap_var = *origin;
- *origin = *end;
- *end = swap_var;
- }
- int medOfThree(int array[], int random_1, int random_2, int random_3) {
- if (array[random_1] <= array[random_2] && array[random_1] >= array[random_3]) {
- return array[random_1];
- } else if (array[random_2] <= array[random_1] && array[random_2] >= array[random_3]) {
- return array[random_2];
- } else {
- return array[random_3];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement