冒泡排序 插入排序 快排

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))

 

posted @ 2024-03-29 22:04  tslam  阅读(5)  评论(0编辑  收藏  举报