sort_utils.py 1.51 KB
Newer Older
bonnieyan committed
1 2 3
class SortUtils:
    def sort(self, f, s):
        if f == "bubble":
bonnieyan committed
4
            for i in range(len(s) - 1):
bonnieyan committed
5
                for j in range(len(s) - i - 1):
bonnieyan committed
6 7
                    if s[j] > s[j+1]:
                        s[j], s[j+1] = s[j+1], s[j]
bonnieyan committed
8 9 10
                    print(s)
            #print(s)
        if f == "quick":
bonnieyan committed
11
            SortUtils.__quick_sort(self, s, 0, len(s)-1)
bonnieyan committed
12

bonnieyan committed
13
    def __quick_sort(self, sort_list, start_index, end_index):
bonnieyan committed
14 15 16
        # print(sort_list)
        if start_index < end_index:  # 如果角标左侧小于右侧则开始排序,否则退出
            basic, i, j = sort_list[start_index], start_index, end_index
bonnieyan committed
17

bonnieyan committed
18
            while i < j:  # 保证左侧的index一定比右侧的小
bonnieyan committed
19

bonnieyan committed
20 21 22 23
                while i < j and basic <= sort_list[j]:  # 基准值比j(右侧)小,那么该值不做任何运算
                    j -= 1  # 角标左移
                while i < j and basic >= sort_list[i]:  # 基准值比i(左侧)大,那么该值不做任何运算
                    i += 1  # 角标右移
bonnieyan committed
24

bonnieyan committed
25 26
                sort_list[i], sort_list[j] = sort_list[j], sort_list[i]
                print("i=" + str(i) + "&&&" + "j=" + str(j) + "$$$" + "sort_list=" + str(sort_list))
bonnieyan committed
27

bonnieyan committed
28
            sort_list[i], sort_list[start_index] = sort_list[start_index], sort_list[i]
bonnieyan committed
29 30
            SortUtils.__quick_sort(self, sort_list, start_index, i - 1)
            SortUtils.__quick_sort(self, sort_list, i + 1, end_index)
bonnieyan committed
31 32 33


p = SortUtils()
bonnieyan committed
34
p.sort("bubble", [10, 5, 2, 16, 4, 9, 13, 8])
bonnieyan committed
35
p.sort("quick", [10, 5, 2, 16, 4, 9, 13, 8])