列表快排

快速排序

快排时间比lowB三人组排序快太多了!
时间复杂度:O(n*logn)

@cal_time
def choice(list):
    """选择排序,将最小数放在第一位,每次都会缩小排序区域"""
    for i in range(0,len(list)):
        min_loc = i  # 从索引0开始取参考值

        # 将剩余区域内的数逐个与min_loc的数比较,若比min_loc对应的值小则取代之
        for j in range(i+1,len(list)):
            if list[j] < list[min_loc]:
                min_loc = j
        # 到最后就确定了这一趟的最小值的索引位置

        list[i],list[min_loc] = list[min_loc],list[i]
        # 位置对调

    return list


def partition(li, left, right):
    """
    :param li:列表
    :param left:0
    :param right:len(li)-1
    :return left左右的索引位置
    """
    tmp = li[left]
    while left < right:
        # 指针指向右侧,逐个左移动,直到右侧的数小于7
        while left < right and li[right] >= tmp:
            right -= 1
        # 将数移动到左侧第一位
        li[left] = li[right]
        # 指针移动到左侧,逐个右移,直到左侧的数大于7
        while left < right and li[left] <= tmp:
            left += 1
        li[right] = li[left]
    li[left] = tmp
    return left


def _quick_sort(li,left,right):
    """快排"""
    if left < right:
        mid = partition(li, left, right)
        _quick_sort(li, left, mid - 1)
        _quick_sort(li, mid + 1, right)


lst = list(range(10000))
import random
import time
random.shuffle(lst)

import copy
lst1 = copy.deepcopy(lst)

# 排序时间对比

@cal_time
def quick_sort(li):
    _quick_sort(li, 0, len(li)-1)

quick_sort(lst)  # quick_sort running time: 0.0665440559387207 secs.

choice(lst1)  # choice running time: 9.267627000808716 secs.

猜你喜欢

转载自www.cnblogs.com/fqh202/p/9375452.html