八大排序算法的python实现(四)快速排序

代码:

#coding:utf-8
#author:徐卜灵
#交换排序.快速排序
# 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
# import sys
# sys.setrecursionlimit(150000)
L = [6, 3, 2, 32, 5, 4]

def Fast_sort(L, left,right):
    if left >= right:
        return L
    key = L[left]
    low = left
    high = right
    while left < right:
        # if L[right] > key:
        #     right-=1
        # else:
        #     L[left] = L[right]
        # if L[left] <= key:
        #     left += 1
        # else:
        #     L[right] = L[left]
        # L[left] = key
        while left < right and L[right] >= key:
            right -= 1
        L[left] = L[right]
        while left < right and L[left] <= key:
            left += 1
        L[right] = L[left]
    L[left] = key
    Fast_sort(L, low, left - 1)
    Fast_sort(L,left + 1,high)
    return L
print Fast_sort(L,0,5)

# 1.高质量代码
# def quick_sort(lists, left, right):
#     # 快速排序
#     if left >= right:
#         return lists
#     key = lists[left]
#     low = left
#     high = right
#     while left < right:
#         while left < right and lists[right] >= key:
#             right -= 1
#         lists[left] = lists[right]
#         while left < right and lists[left] <= key:
#             left += 1
#         lists[right] = lists[left]
#     lists[left] = key
#     quick_sort(lists, low, left - 1)
#     quick_sort(lists, left + 1, high)
#     return lists
# print quick_sort(L,0,5)


#2.高质量代码
# # 设置最低位和最高位
# def quickSort(nums, low, high):
#     # 设置一个比较基准key
#     key = nums[low]
#     while low<high:
#         # 如果最高位的数 大于等于 key则向前走
#         while low<high and nums[high] >= key:
#             high -= 1
#         # 如果最低位的数 小于等于 key则向后走
#         while low<high and nums[low] <= key:
#             low += 1
#         # 交换值
#         nums[low], nums[high] = nums[high], nums[low]
#
#     #最后low=high, 此时交换key和high位上的值, 使小于key的值在key左边, 大的在key右边
#     nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]
#     # 返回最低位的位置
#     return low
#
#
# # 进行重复操作
# def interval(nums, low, high):
#     if low<high:
#         # 进行排序并得到最低位位置以循环操作
#         key_index = quickSort(nums, low, high)
#         interval(nums, low, key_index)
#         interval(nums, key_index+1, high)
#
#
# nums = [64,3,9,2,4,7,0,12,45,]
# interval(nums, 0, len(nums)-1)
# print nums
#

算法理解上没有什么问题,问题在算法实现上。特别注意的是几个索引,low 和 high 做一下缓存。

另外,在用递归的时候,一定注意迭代停止的判断条件。我在写代码的时候就一直忘了加判断条件,结果总是提示错误。一个简单的错误就搞这么久。

时间复杂度:O(nlogn)

空间复杂读:O(nlogn)

非稳定排序算法。

大多数情况下的最优选的排序算法,时间复杂度低嘛。

转载于:https://www.cnblogs.com/xubing-613/p/7286268.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值