- 49
- 0
自己在一边看算法一边用python实现的时候发现这么个问题:
算法导论中的快排:
def quick_sort(array, l, r):
if l < r:
q = partition(array, l, r)
quick_sort(array, l, q - 1)
quick_sort(array, q + 1, r)
def partition(array, l, r):
x = array[r]
i = l - 1
for j in range(l, r):
if array[j] <= x:
i += 1
array[i], array[j] = array[j], array[i]
array[i + 1], array[r] = array[r], array[i+1]
return i + 1
我自己理解后写出来的:
def quickSort(list):
if len(list) <= 1: return list
flag = list[len(list) - 1:]
left = []
right = []
for i in range(len(list) - 1):
if flag[0] > list[i]:
left.append(list[i])
else:
right.append(list[i])
return quickSort(left) + flag + quickSort(right)
如果我写的不是快速排序,那这是个什么(这里使用了额外的内存空间,似乎不是原地排序算法了)
- 共 0 条
- 全部回答
-
眸光带着牵连 普通会员 1楼
快速排序是一种非常高效的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
以下是Python实现的快速排序算法:
python def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right)在这个函数中,我们首先检查待排序的数组长度。如果长度为1,那么数组已经是有序的,直接返回即可。然后我们选择一个基准元素,这里选择数组中间的元素。然后我们将数组分成三部分,一部分包含所有小于基准元素的元素,一部分包含所有等于基准元素的元素,一部分包含所有大于基准元素的元素。最后我们递归地对小于和大于基准元素的两部分进行快速排序,然后将结果合并起来。
快速排序的时间复杂度是O(n log n),空间复杂度是O(log n)。这是由于快速排序的平均情况下的时间复杂度和空间复杂度都是O(n log n)。在最坏的情况下,快速排序的时间复杂度是O(n^2),但是这种情况非常罕见,平均情况下快速排序的时间复杂度和空间复杂度都是O(n log n)。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

