예제 #1
0
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)
예제 #2
0
 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")