快速排序(java代码)

这篇具有很好参考价值的文章主要介绍了快速排序(java代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、快排核心思想

快排核心思想就是:首先在待排序数组中随便选择一个数作为节点(pivot),然后从最后面(high)往左查找比这个节点(pivot)小的数,并且从最前面(low)往右查找比这个节点(pivot)大的数(low),情况1:找到后就把这两个数进行交换,然后接着上面的查找交换直到low等于high,球后将节点(pivot)与low位置处的数进行交换,这样比pivot小的数都在其前面,比pivot大的数就在其后面,然后把数组以pivot分为两半,重复上述操作;情况2:直到low 等于 high都没有找到,就直接交换pivot和low位置的数据,然后同样的将数组以pivot分为两半重复上述操作。(说的挺抽象的,还是看看下面举例吧)

二、实例

以数组{6,3,7,1,9,4,8,5,2,10}为例。
1.为了便于理解,就以6作为节点,开始排序时low等于6,high等于10
快速排序(java代码),算法,排序算法
2.从由右往左找比节点6小的数就是2,从左往右找比节点6大的数就是7,把这两个数交换(这样查找的目的是为了将大的数放后面,较小的数放前面)
快速排序(java代码),算法,排序算法
交换后:
快速排序(java代码),算法,排序算法
3.交换后,high接着往左找比节点6小的数,同时low接着往右找比6大的数,分别是5和9,交换low和high
快速排序(java代码),算法,排序算法
交换后:
快速排序(java代码),算法,排序算法
4.接着相同操作,high往左找到比6小的数4,low往右找大于节点6的数时,low与high相遇,那么本轮查找就结束。接着节点6与low和high的相遇点4交换。这样比6小的数都在其前面,比6da的数都在其后面。
快速排序(java代码),算法,排序算法
交换后:
快速排序(java代码),算法,排序算法
5.一轮操作结束后,原数组被节点6“一分为二”,分别是比6都小的4,3,2,1,5和比6都大的8,9,7,10两个数组。接着就将这两个数组重复上面的操作,操作完成后理论上是数组被“一分为四”,四个数组再进行上面的操作如此循环文章来源地址https://www.toymoban.com/news/detail-527412.html

三、代码实现(java)

public class QuickSort {
    //快排实现方法
    public static void quickRow(int[] array, int low, int high){
        int i,j,pivot;
        //结束条件
        if (low >= high) {
            return;
        }
        i = low;
        j = high;
        //选择的节点,这里选择的数组的第一数作为节点
        pivot = array[low];
        while (i < j){
            //从右往左找比节点小的数,循环结束要么找到了,要么i=j
            while (array[j] >= pivot && i < j){
                j--;
            }
            //从左往右找比节点大的数,循环结束要么找到了,要么i=j
            while (array[i] <= pivot && i < j){
                i++;
            }
            //如果i!=j说明都找到了,就交换这两个数
            if (i < j){
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
        //i==j一轮循环结束,交换节点的数和相遇点的数
        array[low] = array[i];
        array[i] = pivot;
        //数组“分两半”,再重复上面的操作
        quickRow(array,low,i - 1);
        quickRow(array,i + 1,high);
    }

    //测试
    public static void main(String[] args) {
        int[] array = {6,3,7,1,9,4,8,5,2,10};
        int low = 0,high = array.length - 1;
        quickRow(array,low,high);
        for (int i : array){
            System.out.println(i);
        }
    }
}

到了这里,关于快速排序(java代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 六大排序算法(Java版):从插入排序到快速排序(含图解)

    六大排序算法(Java版):从插入排序到快速排序(含图解)

    目录 插入排序 (Insertion Sort) 直接插入排序的特性总结: 选择排序 (Selection Sort) 直接选择排序的特性总结 冒泡排序 (Bubble Sort)  冒泡排序的特性总结 堆排序(Heap Sort) 堆排序的特性总结 希尔排序 (Shell Sort)   希尔排序的特性总结 快速排序(Quick Sort) Hoare版  挖坑法  前后指

    2024年02月09日
    浏览(10)
  • (九)Java算法:快速排序(详细图解)

    (九)Java算法:快速排序(详细图解)

    1.1、概念    快速排序 :用数组的第一个数作为基准数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生

    2024年02月10日
    浏览(11)
  • 随机化快速排序(Java 实例代码)

    随机化快速排序(Java 实例代码)

    一、概念及其介绍 快速排序由 C. A. R. Hoare 在 1960 年提出。 随机化快速排序基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进

    2024年02月11日
    浏览(10)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序,堆排序】超详细~~

    (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序,堆排序】超详细~~

    目录 冒泡排序(BubbleSort): 代码详解:  冒泡排序的优化:  选择排序(SelectSort): 代码详解:  插入排序(InsertSort): 代码详解:  希尔排序(ShellSort):  法一(交换法)代码详解:  法二(移位法--插入排序的优化)代码详解: 快速排序(QuickSort):  代码详解:  归并排

    2024年02月20日
    浏览(13)
  • 三路排序算法(Java 实例代码)

    三路排序算法(Java 实例代码)

    目录   三路排序算法 一、概念及其介绍 二、适用说明 四、Java 实例代码 QuickSort3Ways.java 文件代码:   一、概念及其介绍 三路快速排序是双路快速排序的进一步改进版本,三路排序算法把排序的数据分为三部分,分别为小于 v,等于 v,大于 v,v 为标定值,这样三部分的数据

    2024年02月10日
    浏览(7)
  • 【Java数据结构与算法】Day2-高级排序(希尔、归并、快速、计数)

    【Java数据结构与算法】Day2-高级排序(希尔、归并、快速、计数)

    ✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:【Java数据结构与算法】 🥭本文内容:Java数据结构与算法中的比较高级的排序,希尔排序、归并排序、快速排序、计数排序

    2024年02月02日
    浏览(22)
  • 七大排序算法——归并排序,通俗易懂的思路讲解与图解(完整Java代码)

    七大排序算法——归并排序,通俗易懂的思路讲解与图解(完整Java代码)

    排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 上述待排序的数中,有两个5。 将 前面 的5标记一个a, 将 后面 的5标记一个b。 通过算法进行排序后,这一组数就有序了, 但是要看两个相同的5的位置是否有改变。

    2024年02月15日
    浏览(12)
  • 七大排序算法——冒泡排序,通俗易懂的思路讲解与图解(完整Java代码)

    七大排序算法——冒泡排序,通俗易懂的思路讲解与图解(完整Java代码)

    排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 上述待排序的数中,有两个5。 将 前面 的5标记一个a, 将 后面 的5标记一个b。 通过算法进行排序后,这一组数就有序了, 但是要看两个相同的5的位置是否有改变。

    2024年02月16日
    浏览(14)
  • 七大排序算法——希尔排序,通俗易懂的思路讲解与图解(完整Java代码)

    七大排序算法——希尔排序,通俗易懂的思路讲解与图解(完整Java代码)

    排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 上述待排序的数中,有两个5。 将 前面 的5标记一个a, 将 后面 的5标记一个b。 通过算法进行排序后,这一组数就有序了, 但是要看两个相同的5的位置是否有改变。

    2024年02月03日
    浏览(15)
  • 七大排序算法——堆排序,通俗易懂的思路讲解与图解(完整Java代码)

    七大排序算法——堆排序,通俗易懂的思路讲解与图解(完整Java代码)

    排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 上述待排序的数中,有两个5。 将 前面 的5标记一个a, 将 后面 的5标记一个b。 通过算法进行排序后,这一组数就有序了, 但是要看两个相同的5的位置是否有改变。

    2024年02月16日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包