首页 > 其他分享 >快速排序

快速排序

时间:2024-02-21 09:58:36浏览次数:10  
标签:arr int 快速 右边 排序 基数 left

1. 快速排序的思想
主要思想还是分治法的思想

  • 首先选择一个基数,用作排序的标准
  • 其次定义两个小人(变量),分别代表序列的最左边,和最右边
  • 然后最关键的是让最右边的人先走!!!碰到小于基数就停下来,最左边的人再走,碰到大于基数就停下来
  • 最后交换各自代表的数,然后重复上述动作,直至二人走到同一位置,将当前位置的数与基数进行交换
  • 这时候就会发现基数左边的数都比基数小,基数右边的树都比基数大,然后对基数左边和右边的序列重复相同操作
    下面上图!!








    !!!注:如果让左边先走的话,他找的是比基数大的数,那么就有可能二人在比基数大的数上面碰面,交换位置后出现错误,所以让右边的人先走

2. 上代码

package com.baidu.ueditor;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] arr = {8,4,5,7,1,3,6,2};
        int[] newarr = new int[arr.length];
        QSort(arr , 0 , arr.length-1);
        System.out.println("排序后的序列"+Arrays.toString(arr));
    }
    public static void QSort(int[] arr , int left , int right){
        if(left>right){
            return;
        }
        int i = left;
        int j = right;
        //定义一个基数,作为基准
        int temp = arr[left];
        while(i < j){
            while(temp<arr[j] && i<j){
                j--;
            };
            while(temp>arr[i] && i<j){
                i++;
            };
            if(i < j){
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
        int a = arr[i];
        arr[i] = temp;
        temp = a;
        QSort(arr , left , j - 1);
        QSort(arr , j + 1 , right);
        System.out.println(Arrays.toString(arr));
    }
}

标签:arr,int,快速,右边,排序,基数,left
From: https://www.cnblogs.com/yujiahang/p/18023561

相关文章

  • [转]基于前端技术栈的PC跨平台桌面应用开发技术Electron简介及快速入门
    原文地址:Electron简介及快速入门-知乎大江东去:基于EA的软件工程创新理论与最佳实践第四章:桌面应用系统开发基础及入门第四节:Electron简介及快速入门一、Electron基本介绍官网地址:https://www.electronjs.org/Electron是一个由OpenJS基金会维护的开源项目,也是一个活跃的......
  • 05 内存快照:宕机,Redis如何快速恢复?
    内存快照:指内存中的数据在某一个时刻的状态以文件的形式写到磁盘上,类似于照片。快照文件就称为RDB文件,其中,RDB就是RedisDataBase的缩写。两个关键问题:对哪些数据做快照?关系到快照的执行效率问题;做快照时,数据还能被增删改吗?关系到Redis是否被阻塞,能否同时正常处理请求......
  • docker快速入门与基本指令
    参考资料:https://zhuanlan.zhihu.com/p/137895577https://www.runoob.com/docker/ubuntu-docker-install.html安装docker的安装相对简单,官方提供了一个安装命令:curl-fsSLhttps://test.docker.com-otest-docker.shsudoshtest-docker.sh可以使用piplist|grepd......
  • vite快速安装vue,及项目打包发布
    原文地址:https://mp.weixin.qq.com/s/xdEqyhfmW8P0R_wktymb3wvite快速安装vue,及项目打包发布1.下载、安装VScode,下载地址:https://code.visualstudio.com/2.下载、安装node.js,国内下载地址:http://www.nodejs.com.cn/3.创建空文件夹,用VScode打开,在左侧空白处点击鼠标右键,选择在......
  • 排序算法的定义与分类
    1.排序的定义对一序列对象根据某个关键字进行排序。2.常见的排序算法的分类有冒泡排序,选择排序,插入排序,希尔排序,归并排序,快速排序,堆排序,计数排序,桶排序和基数排序。3.常见的语术说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序......
  • 幻兽帕鲁部署教程,阿里云服务器快速搭建幻兽帕鲁
    本文更新阿里云服务器部署幻兽帕鲁保姆级教程,傻瓜式指南,阿里云作为全球领先的云计算服务提供商,凭借其强大的弹性计算能力、高可用性网络架构和一站式解决方案,为《幻兽帕鲁》等网络游戏提供了卓越的服务器支持。针对游戏场景,阿里云特别设计了一系列便捷高效的部署工具和服务模板,让......
  • 矩阵乘法,矩阵快速幂
    矩阵乘法说白了就是c[i][j]=a[i][k]*b[k][j]矩阵快速幂就是把快速幂中整数乘法换成了矩阵乘法structma{ intm[5][5];}ans,base;macal(maa,mab){ matmp; for(inti=1;i<=2;i++) { for(intj=1;j<=2;j++) { tmp.m[i][j]=0; for(intk=......
  • 算法学习笔记(45): 快速沃尔什变换 FWT
    遗憾的是math里面一直没有很好的讲这个东西……所以这次细致说说。FWT的本质类似于多项式卷积中,利用ntt变换使得卷积\(\to\)点乘,fwt也是类似的应用。定义某种位运算\(\oplus\),那么fwt处理的位运算卷积形如:\[H=F*G\impliesH_k=\sum_{i\oplusj=k}F_iG_......
  • 晚上调代码时写对拍程序之——为了不手写平衡树而乱搞的可支持随机访问、快速插入、快
    前言由于需要一个可支持随机访问、快速插入、快速删除的数据结构,但是我除了平衡树实在是想不到别的东西了,于是就乱搞出了一个这样的东西——abstract数组。但是,这玩意好像码量和平衡树差不多......不过!我认为她还是有优点的:相比起平衡树,她应该更不容易出锅?总之,不管怎么样,还是......
  • vite+vue3+ts+ element-plus 5分钟快速搭建高端大气上档次的企业级网站前端框架
    原文地址:https://mp.weixin.qq.com/s/BANsRtNn5u-4521nFwF3FA一、安装需要的包:1、 element-plus 安装命令:npminstallelement-plus--save  2、vue-router安装命令:npminstallvue-router --save  安装完成后,需要到main.ts注册:import{createApp}from......