def Introsort_Util(arr, begin, end, depthLimit): size = end - begin if size < 16: # if the data set is small, call insertion sort Insertion_Sort.insertion_sort(arr) return if depthLimit == 0: # if the recursion limit is occurred call heap sort Heap_Sort.heapSort(arr) return pivot = statistics.median([begin, begin + size // 2, end]) (arr[pivot], arr[end]) = (arr[end], arr[pivot]) partitionPoint = Quick_Sort.pivot(arr, begin, end) Introsort_Util(arr, begin, partitionPoint - 1, depthLimit - 1) Introsort_Util(arr, partitionPoint + 1, end, depthLimit - 1)
def test_01(self): hs = H.HeapSort([5, 4, 6, 3, 7, 2, 8, 9, 1]) self.assertEqual(9, len(hs.HeapObject.HeapArray)) self.assertEqual(9, hs.GetNextMax()) self.assertEqual(8, len(hs.HeapObject.HeapArray)) self.assertEqual(8, hs.GetNextMax()) self.assertEqual(7, hs.GetNextMax()) self.assertEqual(6, hs.GetNextMax()) self.assertEqual(5, hs.GetNextMax()) self.assertEqual(4, hs.GetNextMax()) self.assertEqual(3, hs.GetNextMax()) self.assertEqual(2, hs.GetNextMax()) self.assertEqual(1, hs.GetNextMax()) self.assertEqual(0, len(hs.HeapObject.HeapArray)) self.assertEqual(-1, hs.GetNextMax()) self.assertEqual([], hs.HeapObject.HeapArray)
f10 = f1.copy() #print("Random array\n",f1,"\n") t = timeit.Timer(lambda: Python_Sort.python_sort(f1)) print("Python sort ", t.timeit(number=1)) #print(f1,"\n") t = timeit.Timer(lambda: Merge_Sort.merge_sort(f2)) print("Merge sort", t.timeit(number=1)) #print(f2,"\n") t = timeit.Timer(lambda: Comb_Sort.comb(f3)) print("Comb sort ", t.timeit(number=1)) #print(f3,"\n") t = timeit.Timer(lambda: Heap_Sort.heapSort(f4)) print("Heap sort ", t.timeit(number=1)) #print(f4,"\n") t = timeit.Timer(lambda: Quick_Sort.quick_sort(f5)) print("Quick sort ", t.timeit(number=1)) #print(f5,"\n") # t=timeit.Timer(lambda : Radix_Sort.radixsort(f6)) # print("Radix sort ",t.timeit(number = 1)) # print(f6, "\n") t = timeit.Timer(lambda: Shell_Sort.shell(f7)) print("Shell sort ", t.timeit(number=1)) #print(f7, "\n")