超级简单的快排(java版)

news/2024/5/19 23:07:31 标签: 算法, 快速排序

思想 (分治)

1.确定分界点 (可以是arr[l] , arr[r] , arr[(l+r)/2] , 也可以是随机的)
2.(调整区间)通过分界点确定区间,是左边的数都小于分界点,右边的数都大于分界点
3.递归处理左右两端

详解

如何调整区间:

未优化前:
	原数组是arr,以x为分界点,重新开辟两个新的数组,将小于x的数全部放入a数组中,将大于x的数全部放入b数组中,最后将a,b数组全部合并到arr数组。(增加了空间,但时间复杂度并未增加)
优化操作:
	双指针(l,r),以x为分界值,若l指针所指数小于x,l指针继续向前移动,直至l所指数大于x,然后移动右指针,直至r所指数小于x,此时交换l,r指针所指的数,当左右指针重合(穿过)时,调整区间完成。

模板

/**
 *  时间复杂度( n log(n) )
 * 		注意边界取值问题,如果数据较大时,java一定要使用BufferedReader读入(要比scanner快10倍左右)
 */

 static void sort_quick(int[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        int x = arr[left];//以左边界的值为基准值
        int i = left - 1; //因为是先移动指针,在进行判断,所以初始化指针为空
        int j = right + 1;
        while (i<j){
            do {
                i++;
            } while (arr[i] < x);

            do {
                j--;
            }while (arr[j]>x);

            if (i<j){
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
        //以j为分界值进行递归,基准值就不能是右边界的值
        
        sort_quick(arr,left,j);
        sort_quick(arr,j+1,right);
    }

http://www.niftyadmin.cn/n/1572553.html

相关文章

一看就会的归并排序(java版)

思想&#xff08;分治&#xff09; 1.确定分界点 mid&#xff08;lr&#xff09;/2 2.递归排序 3.归并&#xff08;合二为一&#xff09; 详解 1.归并时&#xff0c;只需要开一个辅助数组 2.以mid为分界&#xff0c;双指针进行判断&#xff0c;如果arr[index1]<arr[index…

二分模板(java版)

注意 模板是一定会返回值的&#xff0c;具体题目要进行相应的判断 模板1&#xff08;整数二分&#xff09; static int search_1(int[] arr,int l,int r,int x){Arrays.sort(arr);while (l<r){int mid(lr)/2;if (check(mid)){rmid;}else{lmid1;}}return l;}模板2&#xf…

10kv开关柜价格_一进八出10KV电缆分接箱郑州

1.明确项目定位高压开关柜是成套的组合产品&#xff0c;目前国内虽有数百家生产厂商&#xff0c;但其核心部件仍采用进口的产品为主&#xff0c;如果遇到技术问题&#xff0c;设备维护和更换都比较麻烦&#xff0c;因此&#xff0c;在预算充裕的情况下&#xff0c;应尽量选择的…

项目搭建之SpringBoot—Mybatis—SpringMVC

1.新建项目 点击File---->new---->Porject 新建项目&#xff08;选择Spring Initializr 或者是Maven都可以&#xff0c;只是Spring Initializr会帮你自动导入一些坐标依赖&#xff09; 给你的项目的命名&#xff0c;选择jdk版本&#xff08;最好选择1.8&#xff09; 你…

echarts geo地图示例_PyEcharts——地图-数据可视化

注意事项&#xff1a;notebook用的浏览器一定要是谷歌浏览器说明&#xff1a;这些包都正常安装了&#xff0c;但是notebook中无法显示地图&#xff0c;但是保存的网页中可以显示&#xff0c;当时用的是360急速浏览器。我以为重新启动了notebook就好使了&#xff0c;但是还是我不…

用java实现高精度

1.前言 高精度主要用于C/C中&#xff0c;两个比较的整数相加减&#xff0c;一大一小整数相乘除&#xff0c;范围大概是数的长度小于等于10的6次方。但是在java和Python中就用到的比较少了&#xff0c;因为java中有BigInteger的存在&#xff0c;位数是由内存决定的&#xff1b;…

会覆盖本地_【本地风云商家】云龙区京创办公设备经营部

58同城经过十余年的发展&#xff0c;58同城已经发展成为覆盖全领域的生活服务平台。在本地分类信息和生活服务领域&#xff0c;58同城已经建立了全面与本地商家直接接触的服务网络。58同城本地化、覆盖广、更专业的商业优势&#xff0c;进一步获得客户和用户地认可&#xff0c;…

前缀和差分(java版)

一维前缀和 简单来说&#xff1a;我们有一个数组x和它的前缀和数组y&#xff0c;他们满足以下公式。 y 0 x 0 y 1 x 0 x 1 y 2 x 0 x 1 x 2 … 即 y[n]x[1]x[2]…x[n]。 Acwing前缀和题目链接 import java.util.Scanner;public class 一维前缀和 {public static void ma…