#!/usr/bin/env python #Author: Shriphani Palakodety #Mail: shriphani@shriphani.com #Blog: http://shriphani.com/blog def makeSubLists(num_list): '''Divide given numbers into groups of two''' lists = [] i = 0 while i < len(num_list): lists.append(num_list[i:i+2]) i += 2 return lists def sortTwos(num_list): '''sort the lists returned by makeSubLists()''' try: if num_list[0] >= num_list[1]: num_list.reverse() except IndexError: pass return num_list def recurMerge(list1, list2, merged_list=[]): '''recursively merge the two given lists''' if len(list1) == 0: merged_list += list2 return merged_list elif len(list2) == 0: merged_list += list1 return merged_list else: if list1[0] <= list2[0]: merged_list.append(list1[0]) list1.pop(0) else: merged_list.append(list2[0]) list2.pop(0) return recurMerge(list1, list2, merged_list) def merge(singletons): '''supply lists to recurMerge and recursively sort''' final_list = [] if len(singletons) == 1: return singletons[0] else: i = 0 while i < len(singletons): final_list.append(recurMerge(singletons[i], singletons[i+1], [])) i += 2 singletons = final_list return merge(singletons)