python 快速排序 代码实现

快速排序
是对冒泡排序算法的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

1.挑选基准值:从数列中挑出一个元素,称为"基准"(pivot)
2.分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
3.递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。

递归到最底部的判断条件是数列的大小是零或一,此时该数列显然已经有序。

选取基准值有数种具体方法,此选取方法对排序的时间性能有决定性影响。

def parttion(arr,low,high):
    # 最小元素索引
    i = (low-1)
    pivot = arr[high]

    for j in range(low,high):

        # 当前元素小于等于pivot
        if arr[j] <= pivot:

            i += 1
            arr[i],arr[j] = arr[j],arr[i]

    arr[i+1],arr[high] = arr[high],arr[i+1] 
    return ( i+1 )     


# arr[]  排序数组
# low   起始索引
# high  结束索引

# 快速排序排序函数
def quickSort(arr,low,high):
    if low < high:
        pi = parttion(arr,low,high)

        quickSort(arr,low,pi-1)
        quickSort(arr,pi+1,high)

arr = [10,7,9,1,5]
n = len(arr)
quickSort(arr,0,n-1)
print("排列后的数组:",arr)

猜你喜欢

转载自blog.csdn.net/weixin_45598506/article/details/113850649
今日推荐