IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 快速排序算法 -> 正文阅读

[数据结构与算法]快速排序算法

定义

快速排序(Quicksort)是对冒泡排序算法的一种改进。

排序流程

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:

  1. 首先设定一个分界值,通过该分界值将数组分成左右两部分。

  2. 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。

  3. 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

  4. 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

原理图

代码实现

package com.example.activiti.algorithm;
?
import java.util.Arrays;
?
/**
 * 快排算法
 */
public class QuickSort {
 ? ?public static void main(String[] args) {
 ? ? ? ?//待排序的数组
 ? ? ? ?int[] a = {6,2,5,7,1,8,9,3,4};
 ? ? ? ?//开始角标
 ? ? ? ?int start = 0;
 ? ? ? ?//结束角标
 ? ? ? ?int end = a.length - 1;
 ? ? ? ?int[] sortArray = quickSort01(a,start,end);
 ? ? ? ?System.out.println("-------------------------");
 ? ? ? ?System.out.println(Arrays.toString(sortArray));
 ?  }
?
 ? ?/**
 ? ? * 快速排序
 ? ? * @param a ? ?  待排序数组
 ? ? * @param start  (拆分数组)开始位置
 ? ? * @param end ?  (拆分数组)结束位置
 ? ? * @return
 ? ? */
 ? ?private static int[] quickSort01(int[] a, int start, int end) {
 ? ? ? ?//基准值,数组的第一位当作基准值
 ? ? ? ?int pivot = a[start];
 ? ? ? ?int i = start;
 ? ? ? ?int j = end;
 ? ? ? ?//只要start<end就一直循环排序
 ? ? ? ?while(start < end){
 ? ? ? ? ? ?//从右向前移动查找小于基准值的值,并和基准值调换位置
 ? ? ? ? ? ?while((start < end) && (a[end] > pivot)){
 ? ? ? ? ? ? ? ?//角标往前移动
 ? ? ? ? ? ? ? ?end--;
 ? ? ? ? ?  }
 ? ? ? ? ? ?//从左向右移动查找大于基准值的值,并和基准值调换位置
 ? ? ? ? ? ?while((start < end) && (a[start] < pivot)){
 ? ? ? ? ? ? ? ?//角标向前移动
 ? ? ? ? ? ? ? ?start++;
 ? ? ? ? ?  }
 ? ? ? ? ? ?if((start < end) && (a[start] == a[end])){
 ? ? ? ? ? ? ? ?start++;
 ? ? ? ? ?  }else{
 ? ? ? ? ? ? ? ?//开始调换位置
 ? ? ? ? ? ? ? ?int temp = a[start];
 ? ? ? ? ? ? ? ?//将小的放基准值左边
 ? ? ? ? ? ? ? ?a[start] = a[end];
 ? ? ? ? ? ? ? ?//将大的放基准值右边
 ? ? ? ? ? ? ? ?a[end] = temp;
 ? ? ? ? ?  }
 ? ? ? ? ? ?System.out.println(Arrays.toString(a));
 ? ? ? ? ? ?if(start - 1 > i){
 ? ? ? ? ? ? ? ?//对临界值左边的数组排序
 ? ? ? ? ? ? ? ?a = quickSort01(a,i,start-1);
 ? ? ? ? ?  }
 ? ? ? ? ? ?if(end + 1 < j){
 ? ? ? ? ? ? ? ?//对临界值右边的数组排序
 ? ? ? ? ? ? ? ?a = quickSort01(a,end + 1,j);
 ? ? ? ? ?  }
 ? ? ?  }
 ? ? ? ?return a;
 ?  }
}

结果

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

相关视频

https://www.bilibili.com/video/BV1K44y1k79z?from=search&seid=6727721801226228721

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:28:07  更:2021-07-15 16:30:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 6:10:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码