5.快速排序

本文介绍了快速排序算法,这是一种由C.A.R.Hoare在1962年提出的高效排序方法。它通过一趟排序将数据分割成两部分,并递归地对每一部分进行排序,最终得到有序序列。算法步骤包括设定分界值、分割数组、递归排序左右两部分。此外,还提供了Java代码实现快速排序的过程。
摘要由CSDN通过智能技术生成

快速排序

快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在 1962 年提出。

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。

1.算法步骤

1.首先设定一个分界值,通过该分界值将数组分成左右两部分。
2.将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
3.然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
4.重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

2.动图演示

在这里插入图片描述

3.代码实现

/**
 * @description:快速排序
 * @author: Biobang
 * @date: 2022/7/26 20:57
 **/
public class QuickSort {
    public static void quickSort(int[] arr,int left,int right){
        if(left<right) {
            int pivot = partition(arr, left, right);
            //基准元素左边递归
            quickSort(arr, left, pivot - 1);
            //基准元素右边递归
            quickSort(arr, pivot + 1, right);
        }
    }
    public static int partition(int[] arr,int left,int right){
        int pivot = arr[left];//选取第一个元素作为基准元素
        while (left<right){
            //先从右往左移动,直到遇见小于 pivot 的元素
            while (left<right&&arr[right]>=pivot){
                right--;
            }
            arr[left]=arr[right];//记录小于pivot的值
            //从左往右遍历,直到遇见大于 pivot 的元素
            while (left<right&&arr[left]<=pivot){
                left++;
            }
            arr[right]=arr[left];//记录大于pivot的值
        }
        arr[left]=pivot;//记录基准元素到当前指针指向的区域
        return left;//返回基准元素的索引
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值