最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java快速排序及求數(shù)組中第k小的值解析

 更新時(shí)間:2023年11月14日 09:20:39   作者:哇哈哈水有點(diǎn)甜  
這篇文章主要介紹了Java快速排序及求數(shù)組中第k小的值解析,選一個(gè)中間值,把數(shù)組中比它小的元素放到左邊,比它大的元素放到右邊,這時(shí)形成三個(gè)子數(shù)組,分別是中間值,比它大的數(shù)和比它小的數(shù),然后對(duì)前后兩個(gè)數(shù)組進(jìn)行遞歸,需要的朋友可以參考下

快速排序

假設(shè)有一個(gè)如下數(shù)組,對(duì)其進(jìn)行快速排序

[2,90,4,67,234,1,87]

思路:選一個(gè)中間值,把數(shù)組中比它小的元素放到左邊,比它大的元素放到右邊,這時(shí)形成三個(gè)子數(shù)組,分別是中間值,比它大的數(shù)和比它小的數(shù),然后對(duì)前后兩個(gè)數(shù)組進(jìn)行遞歸

最好時(shí)間復(fù)雜度:O(NlogN)

最差時(shí)間復(fù)雜度:O(N^2)

代碼實(shí)現(xiàn)(java)

采用哨兵的概念,設(shè)數(shù)組最后一個(gè)元素為哨兵

public static void quickSort(int[] arr,int begin,int end){
    //遞歸必須滿足條件:起始值小于終止值
    if(begin<end){
        //這個(gè)方法是確定數(shù)組哨兵在排序后的最終位置下標(biāo),由于哨兵左邊的數(shù)都小于哨兵,右邊的數(shù)都大于哨兵,所以對(duì)兩邊子數(shù)組進(jìn)行遞歸
        int index = partition(arr,begin,end);
        //對(duì)左邊的子數(shù)組進(jìn)行遞歸 
        quickSort(arr,begin,index-1);
        //對(duì)右邊的數(shù)組進(jìn)行遞歸
        quickSort(arr,index+1,end);
    }
}
public static int partition(int[] arr,int begin,int end){
    //將數(shù)組的最后一個(gè)元素作為哨兵
    int pivot = arr[end];
    //i為起始坐標(biāo)-1
    int i = begin -1;
    //對(duì)數(shù)組進(jìn)行遍歷,j從數(shù)組的第一個(gè)下標(biāo)開(kāi)始,當(dāng)j對(duì)應(yīng)元素小于哨兵時(shí),i加1,交換i和j對(duì)應(yīng)元素
    for (int j = begin; j < end; j++) {
        //當(dāng)
        if(arr[j]<=pivot){
            i++;
          int tmp = arr[i];
          arr[i]=arr[j];
          arr[j]=tmp;
        }
    }
    //遍歷結(jié)束后,交換arr[i+1]和哨兵的值
    int tmp = arr[i+1];
    arr[i+1]=arr[end]; 
    arr[end]= tmp;
    //i+1就是哨兵最終排序后對(duì)應(yīng)的下標(biāo)
    return i+1;
}

過(guò)程演示:

在這里插入圖片描述

求數(shù)組中第k小的值

分析:第k小的值,就是下標(biāo)為k-1的值

代碼實(shí)現(xiàn)(java)

public static int quickSortKMin(int[] arr,int begin,int end,int k){
    //遞歸必須滿足條件:起始值小于等于終止值
    if(begin<=end){
        //這個(gè)方法是確定數(shù)組哨兵在排序后的最終位置下標(biāo),由于哨兵左邊的數(shù)都小于哨兵,右邊的數(shù)都大于哨兵,所以對(duì)兩邊子數(shù)組進(jìn)行遞歸
        int index = partition(arr,begin,end);
        //如果哨兵的下標(biāo)就等于k-1,那哨兵就是數(shù)組中第k小的值,直接輸出
        if(index==k-1){
            return arr[index];
        }else if(index > k-1){
            //如果k-1小于哨兵的下標(biāo),說(shuō)明在哨兵左側(cè),遞歸查找即可
            return quickSortKMin(arr,begin,index-1,k);
        }else{
            //如果k-1大于哨兵的下標(biāo),說(shuō)明在哨兵右側(cè),遞歸查找即可
            return quickSortKMin(arr,index+1,end,k);
        }
    }
    return Integer.MIN_VALUE;
}


public static int partition(int[] arr,int begin,int end){
    //將數(shù)組的最后一個(gè)元素作為哨兵
    int pivot = arr[end];
    //i為起始坐標(biāo)-1
    int i = begin -1;
    //對(duì)數(shù)組進(jìn)行遍歷,j從數(shù)組的第一個(gè)下標(biāo)開(kāi)始,當(dāng)j對(duì)應(yīng)元素小于哨兵時(shí),i加1,交換i和j對(duì)應(yīng)元素
    for (int j = begin; j < end; j++) {
        //當(dāng)
        if(arr[j]<=pivot){
            i++;
          int tmp = arr[i];
          arr[i]=arr[j];
          arr[j]=tmp;
        }
    }
    //遍歷結(jié)束后,交換arr[i+1]和哨兵的值
    int tmp = arr[i+1];
    arr[i+1]=arr[end];
    arr[end]= tmp;
    //i+1就是哨兵最終排序后對(duì)應(yīng)的下標(biāo)
    return i+1;
}

到此這篇關(guān)于Java快速排序及求數(shù)組中第k小的值解析的文章就介紹到這了,更多相關(guān)Java快速排序及求數(shù)組值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot異步處理全過(guò)程

    SpringBoot異步處理全過(guò)程

    這篇文章主要介紹了SpringBoot異步處理全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • JavaSE static final及abstract修飾符實(shí)例解析

    JavaSE static final及abstract修飾符實(shí)例解析

    這篇文章主要介紹了JavaSE static final及abstract修飾符實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 微信公眾號(hào)開(kāi)發(fā)消息推送功能

    微信公眾號(hào)開(kāi)發(fā)消息推送功能

    微信公眾號(hào)分為服務(wù)號(hào)、訂閱號(hào)、企業(yè)號(hào),訂閱號(hào)可以個(gè)人申請(qǐng),服務(wù)號(hào)和企業(yè)號(hào)要有企業(yè)資質(zhì)才可以,這篇文章主要介紹了微信公眾號(hào)開(kāi)發(fā)消息推送功能,需要的朋友可以參考下
    2023-02-02
  • 實(shí)戰(zhàn)干貨之基于SpringBoot的RabbitMQ多種模式隊(duì)列

    實(shí)戰(zhàn)干貨之基于SpringBoot的RabbitMQ多種模式隊(duì)列

    RabbitMQ 是一個(gè)由Erlang語(yǔ)言開(kāi)發(fā)的AMQP的開(kāi)源實(shí)現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 多種模式隊(duì)列
    2021-09-09
  • Java生成Jar包方法步驟

    Java生成Jar包方法步驟

    在Java開(kāi)發(fā)中,打包成JAR文件是一種常見(jiàn)的方式,本文主要介紹了Java生成Jar包方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Java如何調(diào)用Matlab程序

    Java如何調(diào)用Matlab程序

    這篇文章主要介紹了Java如何調(diào)用Matlab程序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JavaBean valication驗(yàn)證實(shí)現(xiàn)方法示例

    JavaBean valication驗(yàn)證實(shí)現(xiàn)方法示例

    這篇文章主要介紹了JavaBean valication驗(yàn)證實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了JavaBean valication驗(yàn)證相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • IDEA的Swing可視化插件JFormDesigner詳解

    IDEA的Swing可視化插件JFormDesigner詳解

    JFormDesigner是一個(gè)專業(yè)的軟件應(yīng)用程序,專門用于幫助您開(kāi)發(fā)Java?Swing用戶界面,而無(wú)需具備編程技能。它可作為獨(dú)立實(shí)用程序使用,也可以將其用作各種IDE的插件,本文給大家介紹idea?Swing可視化插件,感興趣的朋友一起看看吧
    2022-06-06
  • 關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題

    關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題

    這篇文章主要介紹了關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java中使用instanceof判斷對(duì)象類型的示例

    Java中使用instanceof判斷對(duì)象類型的示例

    在List<Object>中遍歷Object時(shí),先判斷類型,再定向轉(zhuǎn)換,本文給大家介紹Java中使用instanceof判斷對(duì)象類型,感興趣的朋友跟隨小編一起看看吧
    2023-08-08

最新評(píng)論

阿拉善左旗| 江山市| 林甸县| 东兴市| 卫辉市| 广元市| 临夏县| 潜江市| 茶陵县| 安乡县| 南江县| 海兴县| 鸡东县| 中西区| 上犹县| 成武县| 那曲县| 成安县| 南安市| 石嘴山市| 龙口市| 师宗县| 郸城县| 曲周县| 姜堰市| 乳山市| 南郑县| 浦城县| 贺州市| 贵阳市| 昔阳县| 师宗县| 武宁县| 平山县| 新宁县| 苏尼特右旗| 遂宁市| 彭州市| 隆化县| 乌什县| 濮阳市|