快速排序算法设计(简而易懂)

本文详细介绍了快速排序算法,包括其基本思想(分治策略,基准元素划分),实现步骤,以及图解说明。还讨论了算法的时间复杂度(平均O(nlogn),最坏O(n^2))和空间复杂度(平均O(logn),最坏O(n))。
摘要由CSDN通过智能技术生成

一、快速排序的定义

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,是一种排序算法。它采用了分治法(Divide and Conquer)的一个非常典型的应用。

二、基本思想(设计思路)

在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放入最终位置后,整个数据序列被基准分割成两个子序列,所有小于基准的元素放置在前子序列中,所有大于基准的元素放置在后子序列中,并把基准排在这两个子序列的中间,这个过程称作划分。

然后对两个子序列分别重复上述过程,直至每个子序列内只有一个记录或空为止

三、实现步骤

1. 从待排序的数据中选择一个元素作为基准元素(pivot)。

2. 将比基准元素小的元素放在基准元素的左边,将比基准元素大的元素放在基准元素的右边。

3. 递归地对基准元素左边和右边的子序列进行快速排序。

四、图解

我们在排序的时候都要选择一个基准,基准以排序中任意一个数作为基准都可以(通常以第一个元素或者是最后一个元素,这边以最后一个数为基准),每次排序基准都在正确的位置上

核心思想:把比基准小的数放前面,把比基准大的数放后面,然后再以基准数的前半部分和后半部分进行划分(分治思想),各自选基准,在进行排序!

五、代码实现

import java.util.Arrays;

public class Qs {
    public static void main(String[] args) {
        int[] array = {20,5,13,57,99,14,33};
        quickSort(array, 0, array.length - 1);
        System.out.println("Sorted array: " + Arrays.toString(array));
    }

    public static void quickSort(int[] array, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(array, low, high);
            quickSort(array, low, pivotIndex - 1);
            quickSort(array, pivotIndex + 1, high);
        }
    }

    public static int partition(int[] array, int low, int high) {
        int pivot = array[high];
        int i = low - 1;
        for (int j = low; j < high; j++) {
            //如果比指针小的数就移动到前面去
            if (array[j] < pivot) {
                i++;
                swap(array, i, j);
            }
        }
        swap(array, i + 1, high);
        return i + 1;
    }

    public static void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}

六、复杂度分析

快速排序的时间复杂度在平均情况下为O(n log n),最坏情况下为O(n^2)。

空间复杂度在平均情况下为O(log n),最坏情况下为O(n)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值