HiveBrain v1.2.0
Get Started
← Back to all entries
snippetpythonMinor

Merge Sort Algorithm in Python

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
sortpythonalgorithmmerge

Problem

I'm implementing basic sorting algorithms to learn them, and coding, better. Criticisms and possible optimizations welcome.

import unittest
import random

def merge_sort(seq):
    """Accepts a mutable sequence. Utilizes merge_sort to sort in place, return
    a sorted sequence"""
    if len(seq) == 1:
        return seq
    else:
        #recursion: break sequence down into chunks of 1
        mid = len(seq)/2
        left = merge_sort(seq[:mid])
        right = merge_sort(seq[mid:])

        i, j, k = 0, 0, 0 #i= left counter, j= right counter, k= master counter

        #run until left or right is out
        while i < len(left) and j < len(right):
            #if current left val is < current right val; assign to master list
            if left[i] < right[j]:
                seq[k] = left[i]
                i += 1; k += 1
            #else assign right to master
            else:
                seq[k] = right[j]
                j += 1; k += 1

        #handle remaining items in remaining list
        remaining = left if i < j else right
        r = i if remaining == left else j

        while r < len(remaining):
            seq[k] = remaining[r]
            r += 1; k += 1

        return seq

class test_mergesort(unittest.TestCase):
    def test_mergesort(self):
        test = [random.randrange(0, 10000) for _ in range(2000)]
        self.assertEqual(merge_sort(test), sorted(test))

if __name__ == '__main__':
    unittest.main()

Solution

You currently have:

i, j, k = 0, 0, 0 #i= left counter, j= right counter, k= master counter


Don't write minified code. Use variable names.

left_counter, right_counter, master_counter = 0, 0, 0

Code Snippets

i, j, k = 0, 0, 0 #i= left counter, j= right counter, k= master counter
left_counter, right_counter, master_counter = 0, 0, 0

Context

StackExchange Code Review Q#40986, answer score: 8

Revisions (0)

No revisions yet.