
# coding=utf-8
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
class Solution(object):
def QuickSort(self, nums):
"""
:param i:
:param j:
:param nums:
:return:
快排:
数据结构与算法确实是计算机有且仅有的两大重点,
就比如快排,算法就是递归分治思想,但是实际实现的时候比如涉及将小于num[i]的元素全部前移,应该采用何种数据结构,
如果用链表,那么索引就是很难处理的事,如果用数组,那么数组怎么做到这个事
要么使用数组,并且每次重新调用深层递归的时候都新建一个数组,当然随着递归深度增加,数组越来越小,那不行,最后的返回值需要是一张完整的表怎么办?
*数组支持随机访问,链表支持修改元素
递归:交换元素,返回索引
1.怎么交换元素(写个函数?)
2.怎么返回排好的索引(因为选的参照是第一个元素,所以可以直接数有多少拿到了前边)
"""
def QS(i,j):
if jnums[j]:#递归结束
a=nums[i]
nums[i]=nums[j]
nums[j]=a
else:
pass#不交换
else:
k=i
for m in (range(i+1,j+1)):
if nums[m]
自己写的代码是真的烂,然后照书上写了一遍,真的简洁
def QuickSort(nums):
"""
真神奇,但是这里还有个class方法自己不能调用自己的问题
:param nums:
:return:
"""
if len(nums)<2:
return nums
else:
pivot=nums[0]
less=[i for i in nums[1:] if ipivot]
return QuickSort(less)+[pivot]+QuickSort(more)
nums=[100,1,11,37,21,13,45,99,41,27]
print QuickSort(nums)