python各种排序算法_各种排序算法(Python),python

class Solution(object):

def sortArray(self, nums):

"""

:type nums: List[int]

:rtype: List[int]

"""

"""

# 直接偷懒

return sorted(nums)

"""

"""

# 冒泡排序

def bubbleSort(nums):

for i in range(len(nums)-1,-1,-1):

for j in range(i):

if nums[j] > nums[j+1]:

nums[j],nums[j+1] = nums[j+1],nums[j]

return nums

return bubbleSort(nums)

"""

"""

# 插入排序

def insertSort(nums):

for i in range(1,len(nums)):

temp = nums[i]

index = i

while nums[index-1] > temp and index > 0:

nums[index] = nums[index-1]

index-=1

nums[index] = temp

return nums

return insertSort(nums)

"""

"""

# 选择排序

def selectSort(nums):

for i in range(len(nums)-1,1,-1):

max_index = 0

for j in range(i+1):

if nums[j] > nums[max_index]:

max_index = j

nums[max_index],nums[i] = nums[i],nums[max_index]

return nums

return selectSort(nums)

"""

"""

# 归并排序

def mergeSort(nums):

if len(nums)>1:

mid = len(nums)//2

left = nums[:mid]

right = nums[mid:]

mergeSort(left)

mergeSort(right)

i,j,k = 0, 0, 0

while i

if left[i] < right[j]:

nums[k] = left[i]

i+=1

else:

nums[k] = right[j]

j+=1

k+=1

while i < len(left):

nums[k] = left[i]

i+=1

k+=1

while j

nums[k] = right[j]

j+=1

k+=1

return nums

return mergeSort(nums)

"""

"""

# 快速排序

def quictSort(nums):

if len(nums) < 2:

return nums

pivot = nums[len(nums)//2]

left = []

right = []

nums.remove(pivot)

for i in nums:

if i

left.append(i)

else:

right.append(i)

return quictSort(left) + [pivot] + quictSort(right)

return quictSort(nums)

"""

"""

# 希尔排序

def shellSort(nums):

def gapInsertSort(nums,start,gap):

for i in range(start+gap,len(nums),gap):

cur = nums[i]

pos = i

while pos >= gap and nums[pos-gap] > cur:

nums[pos] = nums[pos-gap]

pos = pos - gap

nums[pos] = cur

subNumsCount = len(nums)//2

while subNumsCount > 0:

for i in range(subNumsCount):

gapInsertSort(nums,i,subNumsCount)

subNumsCount//=2

return nums

return shellSort(nums)

"""

"""

# 改善后的冒泡排序

def opt_bubbleSort(nums):

flag = True

passnum = len(nums) - 1

while passnum and flag:

flag = False

for i in range(passnum):

if nums[i] > nums[i+1]:

flag = True

nums[i],nums[i+1] = nums[i+1],nums[i]

passnum-=1

return nums

return opt_bubbleSort(nums)

"""

"""

# 不用借助额外空间的快速排序

def opt_quictSort(nums):

def partition(nums,f,l):

pivot = nums[f]

leftmark = f+1

rightmark = l

done = False

while not done:

while leftmark<=rightmark and nums[leftmark] <= pivot:

leftmark+=1

while rightmark>= pivot and leftmark<=rightmark:

rightmark+=1

if leftmark > rightmark:

done = True

else:

nums[leftmark],nums[rightmark] = nums[rightmark],numr[leftmark]

nums[f],nums[rightmark] = nums[rightmark],nums[f]

return rightmark

def quickSortHelper(nums,f,l):

if f

s = partition(nums,f,l)

quickSortHelper(nums,f,s-1)

quickSortHelper(nums,s+1,l)

return nums

return quickSortHelper(nums,0,len(nums)-1)

"""

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值