国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

面試官:快排會寫嗎?

UCloud / 1439人閱讀

摘要:快排可以說是一道必知的常見面試題,同時也有多種實現(xiàn)方式。之所以使用隨機快速排序而不是普通的快排。其中交換數(shù)組元素位置,打印元素的方法我就沒貼了,代碼太長你們也不方便看。

快排可以說是一道必知的常見面試題,同時也有多種實現(xiàn)方式。在這篇文章中,我使用的是隨機三路快排。

之所以使用隨機快速排序而不是普通的快排。是因為前者可以使得數(shù)列有序的概率降低,從而使隨機快速排序平均速度是比快速排序要快的。具體的兩者的性能差別可以看下這篇文章:

https://blog.csdn.net/haelang...

talk id cheap,show the code。一共 20+ 行代碼,每行代碼都有注釋。其中交換數(shù)組元素位置,打印元素的方法我就沒貼了,代碼太長你們也不方便看。

PS:代碼下面有執(zhí)行流程圖,結(jié)合代碼來看比較容易理解。

public static void main(String[] args) {                                             
     // 測試數(shù)據(jù)                              
     int[] arr = new int[]{5, 3, 6, 4}; 
     // 執(zhí)行快排
     quickSort(arr, 0, arr.length - 1);         
     // 打印數(shù)組元素              
     printArray(arr);                           
 }  
 
private static void quickSort(int[] arr, int l, int r) {               
     if (l < r) {                                                       
         // 隨機取需要排序的數(shù)組中的一個元素和數(shù)組的最后一個元素交換,作為劃分值                          
         swap(arr, l + (int) (Math.random() * (r - l + 1)), r);       
         // 得到數(shù)組元素中等于劃分值的區(qū)域                                             
         int[] part = partition(arr, l, r);                             
         // 小于等于劃分值的區(qū)域                                                  
         quickSort(arr, l, part[0] - 1);                                
         // 大于劃分值的區(qū)域                                                    
         quickSort(arr, part[1] + 1, r);                                
     }                                                                  
 }   

private static int[] partition(int[] arr, int l, int r) {                                                                   
    // 初始化小于等于劃分值區(qū)域的當(dāng)前下標(biāo),默認(rèn)是數(shù)組第一個元素的前一個位置                                                                                   
    int less = l - 1;                                                                                                       
    // 初始化大于劃分值區(qū)域的當(dāng)前下標(biāo),默認(rèn)是數(shù)組最后一個元素的位置,同時也是劃分值的位置,但該值并不屬于大于劃分值的區(qū)域,所以要在最后進(jìn)行移動                                                 
    int more = r;                                                                                                           
    // 當(dāng)前下標(biāo)小于大于劃分值區(qū)域的下標(biāo)時                                                                                                    
    while (l < more) {                                                                                                      
        // 當(dāng)前值比劃分值小,當(dāng)前值和小于等于劃分值區(qū)域的右邊第一個值進(jìn)行交換,小于等于劃分值區(qū)域右移1個下標(biāo),當(dāng)前下標(biāo)+1                                                         
        if (arr[l] < arr[r]) {                                                                                              
            swap(arr, l++, ++less);                                                                                         
            // 當(dāng)前值比劃分值大,當(dāng)前值和大于劃分值區(qū)域的左邊第一個值進(jìn)行交換,大于劃分值的區(qū)域左移1個下標(biāo)                                                               
        } else if (arr[l] > arr[r]) {                                                                                       
            swap(arr, l, --more);                                                                                           
            // 當(dāng)前值等于劃分值,當(dāng)前下標(biāo)+1                                                                                              
        } else {      
            // 當(dāng)前下標(biāo)+1                                                                                          
            l++;                                                                                                            
        }                                                                                                                   
    }                                                                                                                       
    // 將劃分值和大于劃分值區(qū)域中,最接近劃分值區(qū)域的元素交換。至此完成所有值的區(qū)域劃分                                                                             
    swap(arr, more, r);                                                                                                     
    // 返回等于劃分值的區(qū)域                                                                                                           
    return new int[]{less + 1, more};                                                                                       
} 

下面我會畫個流程圖幫大家理解一下,測試數(shù)據(jù)和代碼一樣。

假設(shè)代碼執(zhí)行完 13 行后,測試數(shù)據(jù)的順序依舊不變,即為 {5,3,6,4}。

接下來在執(zhí)行 partition() 方法的過程中,數(shù)組元素的情況如下圖所示(靈魂寫手求輕噴)

好了,以上就是本文的全部內(nèi)容,我們下篇文章再見,捂臉逃~

PS:本文原創(chuàng)發(fā)布于微信公眾號「不只Java」,后臺回復(fù)「Java」,送你 13 本 Java 經(jīng)典電子書。公眾號專注分享 Java 干貨、讀書筆記、成長思考

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72160.html

相關(guān)文章

  • 前端排序算法總結(jié);前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標(biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認(rèn)證和密鑰以建立或恢復(fù)安全會話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...

    aaron 評論0 收藏0
  • 前端排序算法總結(jié);前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標(biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認(rèn)證和密鑰以建立或恢復(fù)安全會話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...

    ARGUS 評論0 收藏0
  • 前端排序算法總結(jié);前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標(biāo)準(zhǔn)化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認(rèn)證和密鑰以建立或恢復(fù)安全會話。 1、前端 排序算法總結(jié) 排序算法可能是你學(xué)編程第一個學(xué)習(xí)的算法,還記得冒泡嗎? 當(dāng)然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...

    April 評論0 收藏0
  • 記一次騰訊霸面---前端

    摘要:客戶端的瀏覽器根據(jù)雙方同意的安全等級,建立會話密鑰,然后利用網(wǎng)站的公鑰將會話密鑰加密,并傳送給網(wǎng)站。地址必須和一個網(wǎng)絡(luò)掩碼對應(yīng)使用缺一不可。網(wǎng)絡(luò)掩碼的主要作用是告訴計算機如何從地址中析取網(wǎng)絡(luò)標(biāo)識和主機標(biāo)識。 霸面的是前端實習(xí)生崗位,當(dāng)時聽同學(xué)說前端缺人,還特意設(shè)了一個霸面區(qū),就去溜了個彎兒,畢竟不試試,怎么知道自己有多菜呢o( ̄︶ ̄)o一面技術(shù)面,面試官關(guān)注的點一直在數(shù)據(jù)結(jié)構(gòu)、算法、計...

    ralap 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<