当前位置:网站首页>快速排序学习记录
快速排序学习记录
2022-07-30 05:46:00 【RSDYS】
算法思想 快速排序法(详解)_李小白~的博客-CSDN博客_快速排序
以下为java版:
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5,3,6,45,-5,0,10,18,1};
quickSort(arr,0,8);
for(int i = 0; i < arr.length-1; i++){
System.out.println(arr[i]);
}
}
public static void quickSort(int[] arr,int left, int right){
if(left > right)
return;
int base = arr[left];
int i = left;
int j = right;
int t = 0;
while(i != j){
while(arr[j] >= base && i < j){
j--;
}
while(arr[i] <= base && i < j){
i++;
}
if(i < j){
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[left] = arr[i];
arr[i] = base;
quickSort(arr, left, i-1);
quickSort(arr, i+1, right);
}
}
另外摘自leetcode的大佬的更加简洁明了的代码:
public class QuickSort {
public static void main(String[] args) {
QuickSort qs = new QuickSort();
int[] arr = {5,3,6,45,-5,0,10,18};
qs.quickSort(arr,0,7);
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
public void quickSort(int[] arr,int left, int right){
//子数组长度为1时终止递归
if(left >= right)
return;
//哨兵划分操作
int i = partition(arr, left, right);
//递归左(右)子数组执行哨兵划分、
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int partition(int[] arr, int left, int right){
//以 arr[1]为基准数
int i = left, j = right;
while(i < j){
while(arr[i] <= arr[j] && i < j) j--;
while(arr[i] >= arr[i] && i > j) i++;
swap(arr, i, j);
}
swap(arr, i, left);
return i;
}
void swap(int[] arr, int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}算法思想简述:
该代码调用三个函数,分别是快速排序主函数,哨兵划分函数,交换函数,每次进入quickSort函数时,首先判断是否结束当前排序,然后对左右哨兵进行划分,进入哨兵函数,将基准值放到哨兵相遇处,并且保证左边都是小于基准值,右边都是大于基准值的,按照此方法进行递归划分,最后排序完毕。
边栏推荐
- 基于QT的CAN通讯数据实时波形显示(连载八)====“子函数或新类调用ui控件”
- C语言,库函数中qsort的用法,及解释
- 2021年软考中级过关
- 工程师必看:常见的PCB检测方法有哪些?
- 主机和从机配置,建立ssh连接实现Rviz远程控制
- [Jiangsu University of Science and Technology Automation Association stm32F103c8t6] Notes [Initial 32 MCU and TIM timing interrupt initialization parameter configuration]
- 你不知道的JS语法篇笔记
- Vim find character
- clinit方法
- NS3报错 fatal error: ns3/opengym-module.h: No such file or directory
猜你喜欢

查看 word版本号

【已解决:el-input标签无法输入或不显示文字】

动态规划入门 JS

this的指向问题

与所有 ARM 工具、软件兼容?韦斯佰瑞这款MCU内核值得关注!

This beta version of Typora is expired, please download and install a newer; workaround

QT串口动态实时显示大量数据波形曲线(五)========“最终完美解决版”

基于QT的CAN通讯数据实时波形显示(连载八)====“子函数或新类调用ui控件”
![[Quick MSP430f149] Notes on learning MSP430f149 during the game](/img/06/741c609b24be007718091b8348666c.png)
[Quick MSP430f149] Notes on learning MSP430f149 during the game
CPU的三种工作模式:实模式、保护模式、长模式
随机推荐
Kunlun On-state Screen Production (serial 1)---Contact
你不知道的JS思考题
关于 PCB 多层板制程能力不得不说的那些事儿
xftp的简单使用
闭包(你不知道的JS)
【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】
【速成MSP430f149】电赛期间学习MSP430f149笔记
Word使用中常用的快捷键
FPGA parsing B code----serial 1
ipconfig Command Guide
QT串口动态实时显示大量数据波形曲线(五)========“最终完美解决版”
jvm之逃逸分析
通过位运算进行字符大小写转换
VSCode隐藏左边活动栏
js高级学习笔记(详细)
查看 word版本号
干货 | 什么是FOC?一文带你看BLDC电机驱动芯片及解决方案
JS的值和引用,复制和传递
vs编译boost库脚本
Comparison of advantages and disadvantages of VsCode and Sublime editors