''' arr = list(arr) gap = 1 while gap < len(arr): i = 0 while i + gap < len(arr): __merge(arr, i, i + gap - 1, min(i + gap + gap - 1, len(arr) - 1)) i += 2 * gap gap *= 2 return arr if __name__ == "__main__": nums = 10000 input_arr = sh.generate_int_array(nums, 0, nums) copy_arr1 = copy_arr2 = input_arr.copy() # sh.sort_cost('insertion_sort', ins.insertion_sort, copy_arr1) sh.sort_cost('merge_sort', merge_sort, input_arr) sh.sort_cost('merge_sort_bottom_up', merge_sort_bottom_up, copy_arr2) input_arr = sh.generate_nearly_ordered_array(nums, 10) copy_arr1 = input_arr.copy() copy_arr2 = input_arr.copy() sh.sort_cost('insertion_sort', ins.insertion_sort, copy_arr1) sh.sort_cost('merge_sort', merge_sort, input_arr) sh.sort_cost('merge_sort_bottom_up', merge_sort_bottom_up, copy_arr2)
import sort_helper as sh def bubble_sort(self, *arr): arr = list(arr) for i in range(len(arr) - 1): swap = False for j in range(len(arr) - 1 - i): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swap = True if not swap: break return arr if __name__ == "__main__": nums = 1000 arr = sh.generate_int_array(nums, 0, nums) sh.sort_cost('bubble_sort', bubble_sort, arr)
class Student(object): def __init__(self, name, score): self.name = name self.score = score def __str__(self): return '%s: %s' % (self.name, self.score) def __lt__(self, other): return self.score < other.score if self.score != other.score else self.name < other.name if __name__ == "__main__": nums = 10000 input_arr = sh.generate_int_array(nums, 0, nums) # sh.print_array(selection_sort(*input_arr)) # input_arr = sh.generate_float_array(nums, 0, nums) # sh.print_array(selection_sort(*input_arr)) # input_arr = sh.generate_string_array(nums, 2) # sh.print_array(selection_sort(*input_arr)) # input_arr = [Student('Zhao',100),Student('Qian',95),Student('Sun',95),Student('Li',90)] # for _ in selection_sort(*input_arr): # print(_) sh.sort_cost('selection_sort', selection_sort, input_arr)
lt += 1 gt -= 1 arr[left], arr[gt] = arr[gt], arr[left] return gt if __name__ == "__main__": nums = 100000 print('Random samples test: size=%d' % nums) arr = sh.generate_int_array(nums, 0, nums) copy_arr = arr.copy() sh.sort_cost('quick_sort', quick_sort, arr) sh.sort_cost('merge_sort', ms.merge_sort, copy_arr) swap = 100 print('Nearly ordered samples test: size=%d swap=%d' % (nums, swap)) arr = sh.generate_nearly_ordered_array(nums, 100) copy_arr = arr.copy() sh.sort_cost('quick_sort', quick_sort, copy_arr) sh.sort_cost('merge_sort', ms.merge_sort, arr) print('Duplicate samples test: size=%d' % nums) arr = sh.generate_int_array(nums, 0, 10) copy_arr = arr.copy() sh.sort_cost('quick_sort', quick_sort, copy_arr) sh.sort_cost('merge_sort', ms.merge_sort, arr)
import sort_helper as sh def insertion_sort(*arr): arr = list(arr) for i in range(1, len(arr)): temp = arr[i] j = i while j > 0 and arr[j - 1] > temp: arr[j] = arr[j - 1] j -= 1 arr[j] = temp return arr if __name__ == "__main__": nums = 10000 input_arr = sh.generate_int_array(nums, 0, nums) sh.sort_cost('insertion sort', insertion_sort, input_arr) input_arr = sh.generate_nearly_ordered_array(nums, 100) sh.sort_cost('insertion sort:', insertion_sort, input_arr)
arr[i], arr[gt] = arr[gt], arr[i] else: i += 1 arr[left], arr[lt] = arr[lt], arr[left] return lt - 1, gt if __name__ == "__main__": nums = 100000 print('Random samples test: size=%d' % nums) arr = sh.generate_int_array(nums, 0, nums) copy_arr2 = copy_arr = arr.copy() sh.sort_cost('quick_sort', qs.quick_sort, arr) sh.sort_cost('merge_sort', ms.merge_sort, copy_arr) sh.sort_cost('quick_sort_three_ways', quick_sort_three_ways, copy_arr2) swap = 100 print('Nearly ordered samples test: size=%d swap=%d' % (nums, swap)) arr = sh.generate_nearly_ordered_array(nums, 100) copy_arr2 = copy_arr = arr.copy() sh.sort_cost('quick_sort', qs.quick_sort, copy_arr) sh.sort_cost('merge_sort', ms.merge_sort, arr) sh.sort_cost('quick_sort_three_ways', quick_sort_three_ways, copy_arr2) print('Duplicate samples test: size=%d' % nums) arr = sh.generate_int_array(nums, 0, 10) copy_arr2 = copy_arr = arr.copy() sh.sort_cost('quick_sort', qs.quick_sort, copy_arr)
if arr[swap] < arr[index]: break arr[swap], arr[index] = arr[index], arr[swap] index = swap if __name__ == "__main__": nums = 100000 print('Random samples test: size=%d' % nums) arr = sh.generate_int_array(nums, 0, nums) copy_arr3 = copy_arr2 = copy_arr = arr.copy() sh.sort_cost('heap_sort', heap_sort, arr) sh.sort_cost('in_place_heap_sort', in_place_heap_sort, copy_arr3) sh.sort_cost('merge_sort', ms.merge_sort, copy_arr) sh.sort_cost('quick_sort_three_ways', qst.quick_sort_three_ways, copy_arr2) swap = 100 print('\nNearly ordered samples test: size=%d swap=%d' % (nums, swap)) arr = sh.generate_nearly_ordered_array(nums, 100) copy_arr3 = copy_arr2 = copy_arr = arr.copy() sh.sort_cost('heap_sort', heap_sort, arr) sh.sort_cost('in_place_heap_sort', in_place_heap_sort, copy_arr3) sh.sort_cost('merge_sort', ms.merge_sort, copy_arr) sh.sort_cost('quick_sort_three_ways', qst.quick_sort_three_ways, copy_arr2) print('\nDuplicate samples test: size=%d' % nums) arr = sh.generate_int_array(nums, 0, 10)