defshell_sort(nums):
step =len(nums)//2while step >0:for cur inrange(step,len(nums)):
i = cur
while i >= step and nums[i-step]> nums[i]:
nums[i-step], nums[i]= nums[i], nums[i-step]
i -= step
step = step //2return nums
nums =[3,6,4,2,11,10,5]
shell_sort(nums)
defmerge_sort(nums):iflen(nums)<=1:return nums
num =len(nums)//2
left = merge_sort(nums[:nums])
right = merge_sort(nums[nums:])return merge(left, right)# 合并defmerge(left, right):
l, r =0,0
result =[]while l <len(left)and r <len(right):if left[l]< right[r]:
result.append(left[l])
l +=1else:
result.append(right[r])
r +=1
result += left[l:]
result += right[r:]return result
nums =[3,6,4,2,11,10,5]
merge_sort(nums)
二分查找法
前提是有序序列
defbinarysearch(nums, target)L
left, right =0,len(nums)while left <= right:
mid = left +(right - left)//2if target == nums[mid]:return mid
elif target < nums[mid]:
right = mid -1else:
left = mid +1return-1
nums =[2,4,7,8,10,12,13]; target =8
binarysearch(nums, target)
冒泡排序def bubble_sort(nums): for i in range(len(nums)-1): for j in range(len(nums)-i-1): if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] return numsnums = [3,6,4,2,11,10,5]bubble_sort(nums)选择排序思想: 每次都从未排序的序列中选择一个最小的数放在已排序