快速排序算法(Quicksort)

举报
赵KK日常技术记录 发表于 2023/07/10 10:11:27 2023/07/10
【摘要】 快速排序算法(Quicksort) 简介快速排序(Quicksort)是一种常用的排序算法,其基本思想是通过递归地将数组分割为较小的子数组,然后通过交换元素的位置,使得整个数组有序。快速排序的时间复杂度为平均情况下的O(nlogn),其中n是待排序数组的长度。相比其他排序算法,快速排序在大多数情况下具有较好的性能表现。 算法步骤快速排序的基本思想是选择一个基准元素(pivot),然后将数组...

快速排序算法(Quicksort)

简介

快速排序(Quicksort)是一种常用的排序算法,其基本思想是通过递归地将数组分割为较小的子数组,然后通过交换元素的位置,使得整个数组有序。快速排序的时间复杂度为平均情况下的O(nlogn),其中n是待排序数组的长度。相比其他排序算法,快速排序在大多数情况下具有较好的性能表现。

算法步骤

快速排序的基本思想是选择一个基准元素(pivot),然后将数组分割为两部分,使得左边的元素都小于等于基准元素,右边的元素都大于等于基准元素。然后对左右两部分分别进行递归排序,直到排序完成。

具体的算法步骤如下:

  1. 选择基准元素。一般可以选择数组的第一个元素作为基准元素。
  2. 设定两个指针,一个指向数组的起始位置(low),一个指向数组的末尾位置(high)。
  3. 通过比较基准元素和指针所指向的元素,将大于基准元素的元素放到右边,将小于基准元素的元素放到左边。交换元素的操作可以通过不断移动指针来实现。
  4. 重复步骤3,直到low指针和high指针相遇。
  5. 将基准元素放到相遇的位置。
  6. 递归地对基准元素的左边和右边进行排序,直到排序完成。

代码实现

下面是使用Python语言实现的快速排序算法代码:

def quicksort(arr, low, high):
    if low < high:
        # 划分数组,获取基准元素的位置
        pivot_index = partition(arr, low, high)
        
        # 递归排序左半部分
        quicksort(arr, low, pivot_index - 1)
        # 递归排序右半部分
        quicksort(arr, pivot_index + 1, high)
        
def partition(arr, low, high):
    # 选择第一个元素作为基准元素
    pivot = arr[low]
    left = low + 1
    right = high
    
    done = False
    while not done:
        # 从左边找到第一个大于基准元素的元素
        while left <= right and arr[left] <= pivot:
            left = left + 1
        # 从右边找到第一个小于基准元素的元素
        while arr[right] >= pivot and right >= left:
            right = right - 1
        
        # 如果左指针和右指针相遇,则结束循环
        if right < left:
            done = True
        else:
            # 交换左指针和右指针所指向的元素
            arr[left], arr[right] = arr[right], arr[left]
    
    # 将基准元素放到正确的位置
    arr[low], arr[right] = arr[right], arr[low]
    
    # 返回基准元素的位置
    return right

示例

为了演示快速排序算法的使用,我们定义一个示例数组并对其进行排序。

arr = [9, 5, 7, 1, 3, 6, 8, 2, 4]
quicksort(arr, 0, len(arr) - 1)
print(arr)

输出结果为:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

总结

快速排序是一种高效的排序算法,其基本思想是通过递归地将数组分割为较小的子数组,并通过交换元素的位置来实现排序。快速排序的时间复杂度为O(nlogn),在大多数情况下具有较好的性能表现。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。