《快速排序》的思想以及代码实现--排序算法(五)

前言

1.排序算法的分类

  1. 内部排序:
    指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。
  2. 外部排序法:
    数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。
  3. 常见的排序算法分类
    在这里插入图片描述

一、(Quick Sort)的基本概念

1.基本介绍

快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

2.执行逻辑

快排的执行逻辑:

  • 首先需要选定一个基准数作为判断的数。
  • 设置两个索引,一个指向最左边,一个指向最右边,左边的向右遍历,右边的向左遍历。遍历整个数据,把比基准数小的放在左边,比基准数大的放在右边。得到两类数组。
  • 一类数组是比基准数小,另一类比基准数大。把这两类数组分别当做新的数组按第一步同理执行。

3.图解过程

假设出一个数组{6,2,8,5}进行排序,设置两个索引,设定arr[0]为基准数,初始化。
在这里插入图片描述

  1. 第一步是r索引先向左走找到比基准数6小的就停下来,所以r就停在数5的位置。之后就是L索引向右走找到比基准数大的数停下来,L停在8的位置。
    在这里插入图片描述
    然后交换数据
    在这里插入图片描述
    2.索引r继续向左走,当l=r的时候,把基准数的位置和位置为l(或者r)的数据交换。就可以得到。
    在这里插入图片描述
    得到基准数左边的数据小于或等于基准数,基准数右边的数据大于或等于基准数。之后再用同样的方法去把两部分的数据实现排序。在代码的实现使用递归的方式。

4.代码实现

package com.datastructure.sort;

import java.util.Arrays;

/**
 * @author Hacah
 * @date 2020/10/15 19:57
 */
public class QuickSort {

    public static void main(String[] args) {
        int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    public static void quickSort(int[] arr,int leftIndex,int rightIndex) {
        if (leftIndex > rightIndex) {
            return;
        }
        // 1、设定好变量
        // 左边的索引
        int l = leftIndex;
        // 右边的索引
        int r = rightIndex;
        // 设定基数
        int pivot = arr[leftIndex];

		// 2、交换两边的数据,直到l=r停止
        while (l < r) {
            // 右边的索引先移动确保当l=r时arr[r]或者arr[l]是等于或小于pivot的。
            // 为什么要保证这样?在代码里寻找。
            while (pivot<=arr[r] && l < r) {
                r--;
            }
            while (pivot>=arr[l] && l < r) {
                l++;
            }
            if (l < r) {
                int temp = arr[l];
                arr[l] = arr[r];
                arr[r] = temp;
            }
        }
        // 3、让基准数在r=l的位置,且进行递归然后排序
        // 交换基准数和r=l时arr[l]的数
        arr[leftIndex] = arr[l];
        arr[l] = pivot;
        // 再递归排序
        quickSort(arr,leftIndex,r-1);
        quickSort(arr,r+1,rightIndex);
    }
}

四、排序算法情况

在这里插入图片描述

相关文章:
《冒泡排序》的思想以及代码实现–排序算法(一)
《选择排序》的思想以及代码实现–排序算法(二)
《插入排序》的思想以及代码实现–排序算法(三)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值