diff --git a/LEXISORT/main.py b/LEXISORT/main.py new file mode 100644 index 0000000..c34f9c3 --- /dev/null +++ b/LEXISORT/main.py @@ -0,0 +1,69 @@ +def merge(l: list, start: int, end: int, end2: int) -> None: + + n1 = end - start + 1 + n2 = end2 - end + + left = [0] * (n1) + right = [0] * (n2) + + for i in range(n1): + left[i] = l[start + i] + + for i in range(n2): + right[i] = l[end + 1 + i] + + i = 0 + j = 0 + k = start + + while i < n1 and j < n2: + if left[i] <= right[j]: + l[k] = left[i] + i += 1 + else: + l[k] = right[j] + j += 1 + k += 1 + + while i < n1: + l[k] = left[i] + j += 1 + k += 1 + + while j < n2: + l[k] = right[j] + j += 1 + k += 1 + +def merge_sort(l: list, left: int, right: int) -> None: + if left < right: + + m = left + (right - 1) // 2 + + merge_sort(l, left, m) + merge_sort(l, m + 1, right) + merge(l, left, m, right) + + +def main(): + lines: list[str] = [] + test_cases = int(input()) + while (test_cases != 0): + n = int(input()) + + while (n != 0): + + lines.append(input()) + + n -= 1 + + merge_sort(lines, 0, len(lines) - 1) + for line in lines: + print(line) + + lines = [] + + test_cases -= 1 + +if __name__ == "__main__": + main() diff --git a/LEXISORT/test.py b/LEXISORT/test.py new file mode 100644 index 0000000..6f31120 --- /dev/null +++ b/LEXISORT/test.py @@ -0,0 +1,79 @@ +# Python program for implementation of MergeSort + +# Merges two subarrays of arr[]. +# First subarray is arr[l..m] +# Second subarray is arr[m+1..r] + + +def merge(arr, l, m, r): + n1 = m - l + 1 + n2 = r - m + + # create temp arrays + L = [0] * (n1) + R = [0] * (n2) + + # Copy data to temp arrays L[] and R[] + for i in range(0, n1): + L[i] = arr[l + i] + + for j in range(0, n2): + R[j] = arr[m + 1 + j] + + # Merge the temp arrays back into arr[l..r] + i = 0 # Initial index of first subarray + j = 0 # Initial index of second subarray + k = l # Initial index of merged subarray + + while i < n1 and j < n2: + if L[i] <= R[j]: + arr[k] = L[i] + i += 1 + else: + arr[k] = R[j] + j += 1 + k += 1 + + # Copy the remaining elements of L[], if there + # are any + while i < n1: + arr[k] = L[i] + i += 1 + k += 1 + + # Copy the remaining elements of R[], if there + # are any + while j < n2: + arr[k] = R[j] + j += 1 + k += 1 + +# l is for left index and r is right index of the +# sub-array of arr to be sorted + + +def mergeSort(arr, l, r): + if l < r: + + # Same as (l+r)//2, but avoids overflow for + # large l and h + m = l+(r-l)//2 + + # Sort first and second halves + mergeSort(arr, l, m) + mergeSort(arr, m+1, r) + merge(arr, l, m, r) + + +# Driver code to test above +arr = [12, 11, 13, 5, 6, 7] +n = len(arr) +print("Given array is") +for i in range(n): + print("%d" % arr[i],end=" ") + +mergeSort(arr, 0, n-1) +print("\n\nSorted array is") +for i in range(n): + print("%d" % arr[i],end=" ") + \ No newline at end of file