Improve python version of merge sort. (#23005)
This commit is contained in:
committed by
Kristofer Koishigawa
parent
213425fac2
commit
01ae4e25a1
@ -211,46 +211,37 @@ void mergesort(int A[],int size_a,int B[],int size_b,int C[])
|
||||
### Implementation in Python
|
||||
|
||||
```python
|
||||
temp = None
|
||||
def merge(arr, left, right):
|
||||
global temp, inversions
|
||||
mid = (left + right) // 2
|
||||
for i in range(left, right + 1):
|
||||
temp[i] = arr[i]
|
||||
|
||||
k, L, R = left, left, mid + 1
|
||||
while L <= mid and R <= right:
|
||||
if temp[L] <= temp[R]:
|
||||
arr[k] = temp[L]
|
||||
L += 1
|
||||
else:
|
||||
arr[k] = temp[R]
|
||||
R += 1
|
||||
k += 1
|
||||
|
||||
while L <= mid:
|
||||
arr[k] = temp[L]
|
||||
L += 1
|
||||
k += 1
|
||||
|
||||
while R <= right:
|
||||
arr[k] = temp[R]
|
||||
R += 1
|
||||
k += 1
|
||||
|
||||
def merge_sort(arr, left, right):
|
||||
if left >= right:
|
||||
return
|
||||
|
||||
mid = (left + right) // 2
|
||||
merge_sort(arr, left, mid)
|
||||
merge_sort(arr, mid + 1, right)
|
||||
merge(arr, left, right)
|
||||
def merge(left,right,compare):
|
||||
result = []
|
||||
i,j = 0,0
|
||||
while (i < len(left) and j < len(right)):
|
||||
if compare(left[i],right[j]):
|
||||
result.append(left[i])
|
||||
i += 1
|
||||
else:
|
||||
result.append(right[j])
|
||||
j += 1
|
||||
while (i < len(left)):
|
||||
result.append(left[i])
|
||||
i += 1
|
||||
while (j < len(right)):
|
||||
result.append(right[j])
|
||||
j += 1
|
||||
return result
|
||||
|
||||
arr = [1,6,3,1,8,4,2,9,3]
|
||||
temp = [None for _ in range(len(arr))]
|
||||
merge_sort(arr, 0, len(arr) - 1)
|
||||
print(arr, inversions)
|
||||
def merge_sort(arr, compare = lambda x, y: x < y):
|
||||
#Used lambda function to sort array in both(increasing and decresing) order.
|
||||
#By default it sorts array in increasing order
|
||||
if len(arr) < 2:
|
||||
return arr[:]
|
||||
else:
|
||||
middle = len(arr) // 2
|
||||
left = merge_sort(arr[:middle], compare)
|
||||
right = merge_sort(arr[middle:], compare)
|
||||
return merge(left, right, compare)
|
||||
|
||||
arr = [2,1,4,5,3]
|
||||
print(merge_sort(arr))
|
||||
```
|
||||
|
||||
### Implementation in Java
|
||||
|
Reference in New Issue
Block a user