From 261caac197e6f1ad72bfcd153637f7b604283b73 Mon Sep 17 00:00:00 2001 From: danghai Date: Sat, 4 May 2019 12:53:11 -0700 Subject: [PATCH] Add partition sort algorithm --- sorting/partitionSort.c | 62 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 sorting/partitionSort.c diff --git a/sorting/partitionSort.c b/sorting/partitionSort.c new file mode 100644 index 00000000..33dea560 --- /dev/null +++ b/sorting/partitionSort.c @@ -0,0 +1,62 @@ +#include +#include + +void swap(int *a, int *b) { + int tmp = *a; + *a = *b; + *b = tmp; +} + +int partition(int arr[], int low, int high) { + int pivot = arr[low]; + int i = low - 1, j = high + 1; + + while(1) { + /* Find leftmost element >= pivot */ + do { + i++; + } while(arr[i] < pivot); + + /* Find rightmost element <= pivot */ + do { + j--; + } while(arr[j] > pivot); + + /* if two pointers met */ + if (i >= j) + return j; + + swap(&arr[i], &arr[j]); + } +} + +void partitionSort(int arr[], int low, int high) { + if(low < high) { + int value = partition(arr, low, high); + partitionSort(arr, low, value); + partitionSort(arr, value + 1, high); + } +} + +void printArray(int arr[], int n) { + int i; + for(i = 0; i < n; i++) + printf("%d ", arr[i]); + printf("\n"); +} + +int main() { + int arr[20]; + int i, range = 100; + for(i = 0; i < 20; i++) { + arr[i] = rand() % range + 1; + } + int size = sizeof arr / sizeof arr[0]; + printf("Array: \n"); + printArray(arr, size); + partitionSort(arr, 0, size - 1); + printf("Sorted Array: \n"); + printArray(arr, size); + + return 0; +}