快速排序算法

复习了下快排写法,顺便练练刚学的python
不过python里传递列表,原来是类似于直接传地址的么

def quick_sort(self, arr, left, right):
    mid = left
    l = left
    r = right
    while l < r:
        while r > l:
            if arr[r] < arr[mid]:
                x = arr[r]
                arr[r] = arr[mid]
                arr[mid] = x
                mid = r
                break
            r -= 1
        while l < r:
            if arr[l] > arr[mid]:
                x = arr[l]
                arr[l] = arr[mid]
                arr[mid] = x
                mid = l
                break
            l += 1

    if left < right:
        self.quick_sort(arr, left, mid-1)
        self.quick_sort(arr, mid+1, right)

简短的写法

def quick_sort(self, li):
        if len(li) < 2:
            return li
        else:
            tmp = li[0]
            less = [i for i in li[1:] if i <= tmp]
            more = [i for i in li[1:] if i > tmp]
            return self.quick_sort(less) + [tmp] + self.quick_sort(more)
posted @ 2021-03-07 20:47  一语子  阅读(71)  评论(0)    收藏  举报