冒泡排序 插入排序 快排
l1 = [11, 55, 0, 88, 22, 77, 44, 44, 66]
# 冒泡排序
# for i in range(1, len(l1)):
# for j in range(1, len(l1) - i + 1):
# if l1[j] < l1[j - 1]:
# l1[j], l1[j - 1] = l1[j - 1], l1[j]
#
# 插入排序
# for i in range(1, len(l1)):
# while i - 1 >= 0 and l1[i] < l1[i - 1]:
# l1[i], l1[i - 1] = l1[i - 1], l1[i]
# i -= 1
#
# print(f'l1:{l1}')
快速排序-双指针法
import random class Solution(object): @staticmethod def get_mid_pos(nums, l, r): # 返回一个数组的随机索引 pivot = random.randint(l, r) # 其与当前数组最后一个元素交换位置 nums[pivot], nums[r] = nums[r], nums[pivot] i = l - 1 # i的作用: 代表小于pivot的元素个数. for j in range(l, r): if nums[j] < nums[r]: # 若j位置的值小于基准值 i += 1 # i往右挪动一个位置 # 并且把该位置的值与j位置的值交换, 这样, i位置及其左边的元素都是比基准值小的 nums[j], nums[i] = nums[i], nums[j] i += 1 nums[i], nums[r] = nums[r], nums[i] return i def sort_src(self, nums, l, r): if r <= l: return mid = self.get_mid_pos(nums, l, r) self.sort_src(nums, l, mid - 1) self.sort_src(nums, mid + 1, r) def quick_sort(self, nums): self.sort_src(nums, 0, len(nums) - 1) return nums nums = [2, 8, 4, 1, 3] print(Solution().quick_sort(nums))