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

快速排序

时间:2023-10-05 22:45:28浏览次数:26  
标签:arr int quickSort 放到 while 排序 快速

快速排序

使用java实现快速排序

 public static void quickSort(int[] arr, int l, int r) {
        if (l >= r) {
            return;
        }
        int lift = l;
        int right = r;
        //选取比较的值,取需要排序的序列的第一个数作为基值
        int p = arr[l];
        //将比p大的放到右边,将比p小的放到左边
        while (l < r) {
            while (l < r && arr[r] >= p) {
                r--;
            }
            if (l < r) {
                arr[l] = arr[r];
            }
            //将这个比p小的放到左边
            while (l < r && arr[l] <= p) {
                l++;
            }
            if (l < r) {
                arr[r] = arr[l];
            }
            if (l >= r) {
                arr[l] = p;
            }
        }
        quickSort(arr, lift, l - 1);
        quickSort(arr, l + 1, right);
    }

如上快速排序的思想是,选取第一个数作为基准数,将比这个数大的数放到右边,将比这个数小的放到左边,这样就能将数分成两个子序列,并在子序列中继续挑选一个数,最终会成为一个从小到大的数组。


public static void quickSort(int[] arr, int l, int r) {
    if (l >= r) {
        return;
    }
    int lift = l;
    int right = r;
    //选取比较的值,取需要排序的序列的第一个数作为基值
    int p = arr[l];
    //将比p大的放到右边,将比p小的放到左边
    while (l < r) {
        while (l < r && arr[r] <= p) {
            r--;
        }
        if (l < r) {
            arr[l] = arr[r];
        }
        //将这个比p小的放到左边
        while (l < r && arr[l] >= p) {
            l++;
        }
        if (l < r) {
            arr[r] = arr[l];
        }
        if (l >= r) {
            arr[l] = p;
        }
    }
    quickSort(arr, lift, l - 1);
    quickSort(arr, l + 1, right);
}

改变两个排序即可将数组变成从大到小排序

标签:arr,int,quickSort,放到,while,排序,快速
From: https://www.cnblogs.com/sparrowzg/p/17744059.html

相关文章

  • 第8章 排序
    一、插入排序基本思想:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列,直到全部记录插入完成直接插入排序时间复杂度:最好O(n):表中元素有序,最坏O(n2):表中元素逆序空间复杂度:O(1)稳定性:稳定,总是插入到相同元素的后面适用性:顺序、链式(从前往后查找指定元素......
  • 快速排序
    一、算法描述快速排序算法是对冒泡排序算法的一种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法之一。快速排序的基本思想:通过一趟排序将待排序的序列分割为左右两个子序列,左边的子序列中所有数据都比右边子序列中的数据小,然后对左右两个子序列继续进行......
  • AcWing_1_1_785_快速排序
    一、题目描述给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数n。第二行包含n个整数(所有整数均在\(1∼10^9\)范围内),表示整个数列。输出格式输出共一行,包含n个整数,......
  • 合并区间(区间排序,vector的动态扩容的应用)
    以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1:输入:intervals=[[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间[1,3......
  • 根据某个关键字的指定顺序,重新对数据源快速排序!
    1职场实例小伙伴们大家好,今天我们来继续重温并学习一个Excel使用过程中最基础的技巧之一:如何根据某个关键字指定的顺序,重新对数据源快速排序?这个问题算是判断掌握Excel是否熟练的一个重要指标了,下面我们就来看一下具体的问题场景。如下图所示:A1:B6单元格区域为数据源区域,为一份水果......
  • 【基础算法】排序算法 —— 插入排序
    一、算法原理插入排序将数组分为已排序区间和未排序区间,初始已排序区间只有数组第1个元素,未排序区间从下标1开始到数组末尾。每次取未排序区间的第1个元素,将它插入已排序区间的合适位置,并保证已排序区间一直有序。重复这个过程,直到未排序区间为空,算法结束。给有序数组(已排序区......
  • 【基础算法】排序算法 —— 选择排序
    一、算法原理选择排序将数组分为已排序区间和未排序区间,每次选择未排序区间的最小元素,将它放到已排序区间末尾。一次选择会让一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序。 示例:使用选择排序对数组arr=[4,5,6,3,2,1]从小到大排序。第1次选择:第2次选择:......
  • 【基础算法】排序算法 —— 冒泡排序
    一、算法原理冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,如果不满足大小关系要求,就进行交换。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序。 示例:使用冒泡排序对数组arr=[4,5,6,3,2,1]从小到大排序。第1次......
  • Centos 快速查看占用资源最多的进程
    1、查看占用内存最多的十个进程psaux|head-1;psaux|grep-vPID|sort-rn-k+4|head 2、查看占用cpu最多的十个进程psaux|head-1;psaux|grep-vPID|sort-rn-k+3|head ————————————————版权声明:本文为CSDN博主「zhangjunli」的原创文......
  • MySQL学习(3)B+树索引是如何快速查询的
    前言我们已经知道在磁盘中,有很多索引页,这些页并非在物理结构上相连接,而是通过双向链表关联。如果要查找一条数据,需要通过页目录中的槽,通过二分法定位到分组再进行遍历查找。比如下面这样:SELECT[查询列表]FROM表名WHERE条件; 假设表中只有一个页,在查找记录时,可以根据搜......