You are viewing a single comment's thread. Return to all comments →
Time Complexity: O(n^2) for insertionsort. O(nlog(n)) for quicksort.
Space Complexity: O(n)
#include <assert.h> #include <ctype.h> #include <limits.h> #include <math.h> #include <stdbool.h> #include <stddef.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> char* readline(); char* ltrim(char*); char* rtrim(char*); char** split_string(char*); int parse_int(char*); void printf_arr(int* arr, int n){ for (int i= 0; i<n; i++){ printf("%d ", arr[i]); } printf("\n"); } void swap(int* a, int* b, int* count){ (*count ) ++; int temp = *a; *a = *b; *b = temp; } int insertionSort2(int n, int arr_count, int* arr, int* count) { for (int i = 1; i<arr_count; i++){ int j = i; while (j-1 >= 0 && arr[j] < arr[j-1]){ swap(&arr[j], &arr[j-1], count); j --; } } return *count; } int partition(int l, int r, int* arr, int* count){ int pivot = arr[r]; int i = l-1; for (int j = l; j<r; j++){ if (arr[j] < pivot){ i ++; swap(&arr[i], &arr[j], count); } } i ++; swap(&arr[i], &arr[r], count); return i; } int quicksort(int l, int r, int* arr, int* count){ if (l < r){ int idx = partition(l, r, arr, count); quicksort(l, idx-1, arr, count); quicksort(idx+1, r, arr, count); } return *count; } int main() { int insertion_sort_count = 0; int quicksort_count = 0; int n = parse_int(ltrim(rtrim(readline()))); char** arr_temp = split_string(rtrim(readline())); int* arr_1 = malloc(n * sizeof(int)); int* arr_2 = malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { int arr_item = parse_int(*(arr_temp + i)); *(arr_1 + i) = arr_item; *(arr_2 + i) = arr_item; } insertion_sort_count = insertionSort2(n, n, arr_1, &insertion_sort_count); quicksort_count = quicksort(0, n-1, arr_2, &quicksort_count); printf("%d\n", insertion_sort_count-quicksort_count); return 0; } char* readline() { size_t alloc_length = 1024; size_t data_length = 0; char* data = malloc(alloc_length); while (true) { char* cursor = data + data_length; char* line = fgets(cursor, alloc_length - data_length, stdin); if (!line) { break; } data_length += strlen(cursor); if (data_length < alloc_length - 1 || data[data_length - 1] == '\n') { break; } alloc_length <<= 1; data = realloc(data, alloc_length); if (!data) { data = '\0'; break; } } if (data[data_length - 1] == '\n') { data[data_length - 1] = '\0'; data = realloc(data, data_length); if (!data) { data = '\0'; } } else { data = realloc(data, data_length + 1); if (!data) { data = '\0'; } else { data[data_length] = '\0'; } } return data; } char* ltrim(char* str) { if (!str) { return '\0'; } if (!*str) { return str; } while (*str != '\0' && isspace(*str)) { str++; } return str; } char* rtrim(char* str) { if (!str) { return '\0'; } if (!*str) { return str; } char* end = str + strlen(str) - 1; while (end >= str && isspace(*end)) { end--; } *(end + 1) = '\0'; return str; } char** split_string(char* str) { char** splits = NULL; char* token = strtok(str, " "); int spaces = 0; while (token) { splits = realloc(splits, sizeof(char*) * ++spaces); if (!splits) { return splits; } splits[spaces - 1] = token; token = strtok(NULL, " "); } return splits; } int parse_int(char* str) { char* endptr; int value = strtol(str, &endptr, 10); if (endptr == str || *endptr != '\0') { exit(EXIT_FAILURE); } return value; }
Seems like cookies are disabled on this browser, please enable them to open this website
Running Time of Quicksort
You are viewing a single comment's thread. Return to all comments →
Time Complexity: O(n^2) for insertionsort. O(nlog(n)) for quicksort.
Space Complexity: O(n)