From af6311da0a58bc64926656bf6566250157379e61 Mon Sep 17 00:00:00 2001 From: Muhammad Assagaf Date: Tue, 1 Oct 2019 19:33:43 +0700 Subject: [PATCH] add multiple sorting algo in python --- Algorithms/sorting/bubble_sort.py | 12 +++++++++ Algorithms/sorting/insertion_sort.py | 16 ++++++++++++ Algorithms/sorting/merge_sort.py | 37 ++++++++++++++++++++++++++++ Algorithms/sorting/quick_sort.py | 27 ++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 Algorithms/sorting/bubble_sort.py create mode 100644 Algorithms/sorting/insertion_sort.py create mode 100644 Algorithms/sorting/merge_sort.py create mode 100644 Algorithms/sorting/quick_sort.py diff --git a/Algorithms/sorting/bubble_sort.py b/Algorithms/sorting/bubble_sort.py new file mode 100644 index 0000000..acfb7e7 --- /dev/null +++ b/Algorithms/sorting/bubble_sort.py @@ -0,0 +1,12 @@ +def bubble_sort(arr): + size = len(arr) + for i in range(size): + for j in range(size-1): + if arr[j] > arr[j+1]: + arr[j], arr[j+1] = arr[j+1], arr[j] + + +arr = [5,4,3,1,2,3,1,1,3] +print('before', arr) +bubble_sort(arr) +print('after', arr) diff --git a/Algorithms/sorting/insertion_sort.py b/Algorithms/sorting/insertion_sort.py new file mode 100644 index 0000000..c566e31 --- /dev/null +++ b/Algorithms/sorting/insertion_sort.py @@ -0,0 +1,16 @@ +def insertion_sort(arr): + size = len(arr) + for i in range(1,size): + value = arr[i] + hole = i + while hole > 0 and arr[hole-1] > value: + arr[hole] = arr[hole-1] + hole -= 1 + arr[hole] = value + + +arr = [5,4,3,1,2,3,1,1,3] +print('before', arr) +insertion_sort(arr) +print('after', arr) + diff --git a/Algorithms/sorting/merge_sort.py b/Algorithms/sorting/merge_sort.py new file mode 100644 index 0000000..4d1f222 --- /dev/null +++ b/Algorithms/sorting/merge_sort.py @@ -0,0 +1,37 @@ +def merge_sort(arr): + if len(arr) > 1: + mid = len(arr)//2 + left_arr = arr[:mid] + right_arr = arr[mid:] + + merge_sort(left_arr) + merge_sort(right_arr) + + left_idx = right_idx = curr_idx = 0 + + while left_idx < len(left_arr) and right_idx < len(right_arr): + if left_arr[left_idx] < right_arr[right_idx]: + arr[curr_idx] = left_arr[left_idx] + left_idx += 1 + else: + arr[curr_idx] = right_arr[right_idx] + right_idx += 1 + curr_idx += 1 + + + while left_idx < len(left_arr): + arr[curr_idx] = left_arr[left_idx] + left_idx += 1 + curr_idx += 1 + + while right_idx < len(right_arr): + arr[curr_idx] = right_arr[right_idx] + right_idx += 1 + curr_idx += 1 + + +arr = [5,4,3,1,2,3,1,1,3] +print('before', arr) +merge_sort(arr) +print('after', arr) + diff --git a/Algorithms/sorting/quick_sort.py b/Algorithms/sorting/quick_sort.py new file mode 100644 index 0000000..2410270 --- /dev/null +++ b/Algorithms/sorting/quick_sort.py @@ -0,0 +1,27 @@ +def partition(arr, low, high): + i = low - 1 + pivot = arr[high] + for j in range(low, high): + if arr[j] <= pivot: + i += 1 + arr[i],arr[j] = arr[j],arr[i] + arr[i+1], arr[high] = arr[high], arr[i+1] + return i + 1 + + +def quick_sort_func(arr, low, high): + if low < high: + partition_idx = partition(arr, low, high) + + quick_sort_func(arr, low, partition_idx-1) + quick_sort_func(arr, partition_idx+1, high) + +def quick_sort(arr): + quick_sort_func(arr, 0, len(arr)-1) + + +arr = [5,4,3,1,2,3,1,1,3] +print('before', arr) +quick_sort(arr) +print('after', arr) +