python 排序方式之冒泡,选择,插入排序

class SortList(object):
    '''定义一个类方法,把多种排序方法集成起来'''
    def __init__(self,items=None):
        self.items=items

    def bubble_sort(self,li):
        """
        冒泡排序 # 稳定性:稳定
                # 最优时间复杂度 :O(n)
                # 最坏时间复杂度 :O(n^2)

            :param li:
            :return:
        """
        n = len(li)
        # 共执行冒泡排序的趟数,n-1趟

        for j in range(n - 1):  # 0 1 2 3

            flag = False
            # 遍历列表,从0位置移动到倒数第二个位置
            for i in range(n - 1 - j):  # n-1 n-2 n-3
                # 判断当前位置与下一个位置的数据,如果大于下一个位置的数据,交换
                if li[i] > li[i + 1]:
                    li[i], li[i + 1] = li[i + 1], li[i]
                    flag = True

            if flag == False:
                break

    def select_sort(self,li):
        '''
         选择排序  # 稳定性 : 不稳定
                  # 最优时间复杂度 :O(n^2)
                  # 最坏时间复杂度 :O(n^2)

            :param li:
            :return:
        '''
        n = len(li)
        # 选择的次数,n-1次,每一次选择一个最小的数,依次放到0~n-1 位置
        for j in range(n - 1):

            # 选择一次,把最小的数放到0位置
            # 认为0位置的数据最小,记录0位置
            min_index = j
            # 那最小的数,跟后面所有的数据进行比较
            for i in range(1 + j, n):
                # 拿最小的数跟当前位置的数比较,让min_index 记录最小的数的位置
                if li[i] < li[min_index]:
                    min_index = i
            # for循环结束,min_index指向最小的数
            li[min_index], li[j] = li[j], li[min_index]

    def insert_sort(self,li):
        """
        插入排序 # 稳定性 : 稳定
                # 最坏时间复杂度:O(n^2)
                # 最优时间复杂度:O(n)

            :param li:
            :return:
        """
        n = len(li)
        # 每次把一个数插入到前面有序序列,从1位置到n位置
        for j in range(1, n):
            # 认为第一个数据有序,从后面拿一个数据,跟前面有序序列再组成有序
            # 把指定位置的数据插入到前面有序序列中
            for i in range(j, 0, -1):  # 2 1
                if li[i] < li[i - 1]:
                    li[i], li[i - 1] = li[i - 1], li[i]
                else:
                    # 当前位置的数据已经大于前面有序序列的最后一个数,终止循环
                    break

l = [11,3,13,4,5,2,44,33]
# s=SortList().bubble_sort(l)
# s=SortList().select_sort(l)
s=SortList().insert_sort(l)
print(l)

猜你喜欢

转载自blog.csdn.net/liming066/article/details/85250279
今日推荐