class SortUtils:
    def sort_s(self, lis, way):
        if way == 'bubble':
            self._bubble(lis)
        if way == 'quick':
            self._quick(lis, 0, len(lis)-1)

    def _bubble(self, lis):
        for i in range(len(lis) - 1):
            for j in range(len(lis) - 1 - i):
                if lis[j] > lis[j + 1]:
                    lis[j], lis[j + 1] = lis[j + 1], lis[j]
                print(lis)
        return lis

    def _quick(self, list_str, start_index, end_index):
        if start_index < end_index:  # 角标左侧小于右侧开始排序
            i, basick, j = start_index, list_str[start_index], end_index
            while i <j:# 首先保证左侧的index比右侧的小
                while i < j and basick <= list_str[j]:  # 基准比有侧的下表为(j)值小时,角标做左移
                    j -= 1
                while i < j and basick >= list_str[i]:# 基准比左侧的下表为(i)值大时,角标右移
                    i += 1
                list_str[i], list_str[j]=list_str[j],list_str[i]
                print("i=" + str(i) + "&&&" + "j=" + str(j) + "$$$" + "sort_list=" + str(list_str))
            list_str[start_index],list_str[i]=list_str[i],list_str[start_index]# 当i=j时,将基准值与下标为i或者j的值交换位置
            self._quick(list_str,start_index , i-1)# 取i=j的下标左侧的值在执行
            self._quick(list_str,i+1,end_index)




if __name__ == '__main__':
    s = SortUtils()
    s.sort_s([10, 6, 9, 18, 20, 5, 7, 15, 14, 18, 19], 'quick')
    # s.sort_s([10, 6, 9, 18, 20, 5, 7, 15, 14, 18, 19], 'bubble')