排序算法——快速排序【未写完】

快速排序:通过多次的比较与交换来完成排序,而这个过程又被分为多次重复单趟排序

算法思想:

         1. 在一个无序数组中取一个数key,每一趟排序的最终目的是: 让key左边的所有数都比key小,让key右边的所有数都比key大【假设进行升排序】

        也就是说,无论key的左边还是右边是否有序,key都到了它在整个数组有序时,应该在的位置上,对于key来说,他已经有序了, 即每次排序都会固定好一个数

         2.接着,再对key的左右区间进行单趟排序,直到每个数都到达它该到的位置上,即整个数组有序

进行一趟快速排序的代码,使用双指针实现的:

def quick_sort(arr, start, end):
    if start >= end or start < 0 or end >= len(arr):
        return
    """
    通过双指针实现快速排序
    :param arr: 待排序的数组
    :param start: 头指针
    :param end: 尾指针
    """

    # 记录关键点的下标
    key = start
    # 若头指针大于等于尾指针则代表循环结束,此时代表着关键点找到了自己的位置
    while start < end:
        # 此时关键点在数组前列,若关键点的值大于尾指针当前指的值,则进行调换
        if key < end and arr[key] > arr[end]:
            arr[key], arr[end] = arr[end], arr[key]
            # 此时关键点指向end所指向的位置
            key = end
            # 头指针加一,因为此时头指针之前的包括头指针所指向的数都小于key值
            start += 1
        if key < end and arr[key] < arr[end]:
            end -= 1
        # 此时关键点在数组后列,若关键点的值小于头指针当前指的值,则进行调换
        if key > start and arr[key] < arr[start]:
            arr[key], arr[start] = arr[start], arr[key]
            # 此时关键点指向start所指向的位置
            key = start
            # 尾指针减一,因为此时尾指针之后的包括尾指针所指向的数都大于key值
            end -= 1
        if key > start and arr[key] > arr[start]:
            start += 1



def main():
    arr = [5, 56, 67, 2, 56, 25, 3, 65]
    quick_sort(arr, 0, len(arr)-1)
    print(arr)

if __name__ == '__main__':
    main()

运行结果为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值