From ffb12ae1328ec9b207e6c79d1c2c79e99dde86cf Mon Sep 17 00:00:00 2001 From: Yash Date: Sun, 18 Oct 2020 17:04:44 +0530 Subject: [PATCH 1/4] randomized_quicksort added --- Algorithms/randomized_quicksort.cpp | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Algorithms/randomized_quicksort.cpp diff --git a/Algorithms/randomized_quicksort.cpp b/Algorithms/randomized_quicksort.cpp new file mode 100644 index 00000000..010f6c51 --- /dev/null +++ b/Algorithms/randomized_quicksort.cpp @@ -0,0 +1,49 @@ +#include +using namespace std; + +void swap(int *a,int *b){ + int temp = *b; + *b = *a; + *a = temp; +} + +int random_partition(int a[],int start,int end){ + srand(time(NULL)); + int random = start + rand() % (end - start); + swap(&a[random], &a[end]); + + int pivot = a[end]; + int pindex = start; + for(int i = start; i < end ; i++){ + if(a[i] <= pivot){ + swap(&a[i],&a[pindex]); + pindex++; + } + } + swap(&a[pindex],&a[end]); + + return pindex; +} +void randomized_quicksort(int a[],int start,int end){ + if(start < end){ + int pindex = random_partition(a,start,end); + randomized_quicksort(a,start,pindex-1); + randomized_quicksort(a,pindex+1,end); + } +} +int main(){ + int n; + cin >> n; + int a[n]; + + for(int i = 0 ; i < n ; i++){ + cin >> a[i]; + } + + randomized_quicksort(a,0,n-1); + + for(int i = 0 ; i < n ; i++){ + cout << a[i] << " "; + } + cout << endl; +} \ No newline at end of file From f9dc6dda410e15aa0cda9e9c8f34cdb0f7f785b3 Mon Sep 17 00:00:00 2001 From: Yash Date: Mon, 19 Oct 2020 12:40:41 +0530 Subject: [PATCH 2/4] random quicksort --- CPP/randomized_quicksort.cpp | 49 ++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 CPP/randomized_quicksort.cpp diff --git a/CPP/randomized_quicksort.cpp b/CPP/randomized_quicksort.cpp new file mode 100644 index 00000000..010f6c51 --- /dev/null +++ b/CPP/randomized_quicksort.cpp @@ -0,0 +1,49 @@ +#include +using namespace std; + +void swap(int *a,int *b){ + int temp = *b; + *b = *a; + *a = temp; +} + +int random_partition(int a[],int start,int end){ + srand(time(NULL)); + int random = start + rand() % (end - start); + swap(&a[random], &a[end]); + + int pivot = a[end]; + int pindex = start; + for(int i = start; i < end ; i++){ + if(a[i] <= pivot){ + swap(&a[i],&a[pindex]); + pindex++; + } + } + swap(&a[pindex],&a[end]); + + return pindex; +} +void randomized_quicksort(int a[],int start,int end){ + if(start < end){ + int pindex = random_partition(a,start,end); + randomized_quicksort(a,start,pindex-1); + randomized_quicksort(a,pindex+1,end); + } +} +int main(){ + int n; + cin >> n; + int a[n]; + + for(int i = 0 ; i < n ; i++){ + cin >> a[i]; + } + + randomized_quicksort(a,0,n-1); + + for(int i = 0 ; i < n ; i++){ + cout << a[i] << " "; + } + cout << endl; +} \ No newline at end of file From 5c91de3c1e03924ea970665279598ae7d8d6f4c8 Mon Sep 17 00:00:00 2001 From: Yash Date: Mon, 19 Oct 2020 12:43:14 +0530 Subject: [PATCH 3/4] random-quicksort added --- Algorithms/randomized_quicksort.cpp | 49 ----------------------------- 1 file changed, 49 deletions(-) delete mode 100644 Algorithms/randomized_quicksort.cpp diff --git a/Algorithms/randomized_quicksort.cpp b/Algorithms/randomized_quicksort.cpp deleted file mode 100644 index 010f6c51..00000000 --- a/Algorithms/randomized_quicksort.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -using namespace std; - -void swap(int *a,int *b){ - int temp = *b; - *b = *a; - *a = temp; -} - -int random_partition(int a[],int start,int end){ - srand(time(NULL)); - int random = start + rand() % (end - start); - swap(&a[random], &a[end]); - - int pivot = a[end]; - int pindex = start; - for(int i = start; i < end ; i++){ - if(a[i] <= pivot){ - swap(&a[i],&a[pindex]); - pindex++; - } - } - swap(&a[pindex],&a[end]); - - return pindex; -} -void randomized_quicksort(int a[],int start,int end){ - if(start < end){ - int pindex = random_partition(a,start,end); - randomized_quicksort(a,start,pindex-1); - randomized_quicksort(a,pindex+1,end); - } -} -int main(){ - int n; - cin >> n; - int a[n]; - - for(int i = 0 ; i < n ; i++){ - cin >> a[i]; - } - - randomized_quicksort(a,0,n-1); - - for(int i = 0 ; i < n ; i++){ - cout << a[i] << " "; - } - cout << endl; -} \ No newline at end of file From 7f1c7df0e2cce2903c03feea9c0fb02786706e44 Mon Sep 17 00:00:00 2001 From: Yash Date: Mon, 19 Oct 2020 13:01:42 +0530 Subject: [PATCH 4/4] added random quicksort --- CPP/randomized_quicksort.cpp | 49 ------------------------------------ CPP/randomized_quicksort.py | 38 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 49 deletions(-) delete mode 100644 CPP/randomized_quicksort.cpp create mode 100644 CPP/randomized_quicksort.py diff --git a/CPP/randomized_quicksort.cpp b/CPP/randomized_quicksort.cpp deleted file mode 100644 index 010f6c51..00000000 --- a/CPP/randomized_quicksort.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -using namespace std; - -void swap(int *a,int *b){ - int temp = *b; - *b = *a; - *a = temp; -} - -int random_partition(int a[],int start,int end){ - srand(time(NULL)); - int random = start + rand() % (end - start); - swap(&a[random], &a[end]); - - int pivot = a[end]; - int pindex = start; - for(int i = start; i < end ; i++){ - if(a[i] <= pivot){ - swap(&a[i],&a[pindex]); - pindex++; - } - } - swap(&a[pindex],&a[end]); - - return pindex; -} -void randomized_quicksort(int a[],int start,int end){ - if(start < end){ - int pindex = random_partition(a,start,end); - randomized_quicksort(a,start,pindex-1); - randomized_quicksort(a,pindex+1,end); - } -} -int main(){ - int n; - cin >> n; - int a[n]; - - for(int i = 0 ; i < n ; i++){ - cin >> a[i]; - } - - randomized_quicksort(a,0,n-1); - - for(int i = 0 ; i < n ; i++){ - cout << a[i] << " "; - } - cout << endl; -} \ No newline at end of file diff --git a/CPP/randomized_quicksort.py b/CPP/randomized_quicksort.py new file mode 100644 index 00000000..75a52da5 --- /dev/null +++ b/CPP/randomized_quicksort.py @@ -0,0 +1,38 @@ +import random + +def quicksort(arr, start, stop): + if(start < stop): + + pivotindex = partitionrand(arr, start, stop) + + quicksort(arr , start , pivotindex) + quicksort(arr, pivotindex + 1, stop) + + +def partitionrand(arr , start, stop): + randpivot = random.randrange(start, stop) + arr[start], arr[randpivot] = arr[randpivot], arr[start] + return partition(arr, start, stop) + +def partition(arr,start,stop): + pivot = start + i = start - 1 + j = stop + 1 + while True: + while True: + i = i + 1 + if arr[i] >= arr[pivot]: + break + while True: + j = j - 1 + if arr[j] <= arr[pivot]: + break + if i >= j: + return j + arr[i] , arr[j] = arr[j] , arr[i] + + +if __name__ == "__main__": + array = [10, 7, 8, 9, 1, 5, 4, 5,-5] + quicksort(array, 0, len(array) - 1) + print(array) \ No newline at end of file