1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
| import time import random class OwnSort: def __init__(self, count, range_var): self.list = [] self.count = count for i in range(count): self.list.append(random.randint(0, range_var))
def bubble_sort(self): i = 0 while i < self.count: j = 0 flag = True while j < self.count - 1: if self.list[j] > self.list[j + 1]: self.list[j], self.list[j+1] = self.list[j+1], self.list[j] flag = False j += 1 if flag: break i += 1
def select_sort(self): i = 0 while i < self.count-1: j = i + 1 min_index = i while j < self.count: if self.list[min_index] > self.list[j]: min_index = j j += 1 self.list[min_index], self.list[i] = self.list[i], self.list[min_index] i += 1
def insert_sort(self): i = 0 while i < self.count-1: j = i insert_value = self.list[j+1] while j >= 0: if insert_value < self.list[j]: self.list[j+1] = self.list[j] else: break j -= 1 self.list[j+1] = insert_value i += 1
def partition_left(self, low, hight): pivot = self.list[low] while low < hight: while low < hight and pivot <= self.list[hight]: hight -= 1 self.list[low] = self.list[hight] while low < hight and pivot >= self.list[low]: low += 1 self.list[hight] = self.list[low] self.list[low] = pivot return low
def partition_right(self, low, hight): i = k = low while i < self.count: if self.list[hight] > self.list[i]: self.list[i], self.list[k] = self.list[k], self.list[i] i += 1 k += 1 else: i += 1 self.list[hight], self.list[k] = self.list[k], self.list[hight] return k
def quick_sort(self, low, hight): if low < hight: pivot = self.partition_right(low, hight) self.quick_sort(low, pivot-1) self.quick_sort(pivot+1, hight)
def merge(self, low, mid, high): listp = self.list.copy() i = k = low j = mid + 1 while i <= mid and j <= high: if listp[i] <= listp[j]: self.list[k] = listp[i] i += 1 else: self.list[k] = listp[j] j += 1 k += 1 while i <= mid: self.list[k] = listp[i] k += 1 i += 1 while j <= high: self.list[k] = listp[j] k += 1 j += 1
def mergesort(self, low, high): if low < high: mid = (low + high) // 2 self.mergesort(low, mid - 1) self.mergesort(mid + 1, high) self.merge(low, mid, high)
def adjust_max_heap(self, adjust_pos, length): dad = adjust_pos son = 2 * dad + 1 while son < length: if son + 1 < length and self.list[son] < self.list[son + 1]: son = son + 1 if self.list[dad] < self.list[son]: self.list[dad], self.list[son] = self.list[son], self.list[dad] dad = son son = 2 * dad + 1 else: break
def heapsort(self): for i in range(self.length // 2 - 1, -1, -1): self.adjust_max_heap(i, self.length) self.list[0], self.list[self.length - 1] = self.list[self.length - 1], self.list[0] for i in range(self.length - 1, 1, -1): self.adjust_max_heap(0, i) self.list[0], self.list[i - 1] = self.list[i - 1], self.list[0]
def countsort(self): listp = [0] * (self.var_range + 1) k = 0 for num in self.list: listp[num] += 1 for i in range(self.var_range + 1): for j in range(listp[i]): self.list[k] = i k += 1
|