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

Java快速排序案例講解

 更新時間:2021年08月10日 17:16:48   作者:天涯~  
這篇文章主要介紹了Java快速排序案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

交換類排序主要是通過兩兩比較待排元素的關(guān)鍵字,若發(fā)現(xiàn)與排序要求相逆,則“交換”之。在這類排序方法中最常見的是冒泡排序和快速排序。上一篇簡單寫了冒泡排序,這次簡單寫一寫快速排序。

快速排序的思想:

快速排序是將分治法運用到排序問題中的一個典型例子,其基本思想是:通過一個樞軸(pivot)元素將 n 個元素的序列分為左、右兩個子序列 Ll 和 Lr,其中子序列 Ll中的元素均比樞軸元素小,而子序列 Lr 中的元素均比樞軸元素大,然后對左、右子序列分別進行快速排序,在將左、右子序列排好序后,則整個序列有序,而對左右子序列的排序過程直到子序列中只包含一個元素時結(jié)束,此時左、右子序列由于只包含一個元素則自然有序。

對待排序序列進行劃分:

使用兩個指針 low 和 high 分別指向待劃分序列 r 的范圍,取 low 所指元素為樞軸,即 pivot = r[low]。劃分首先從 high 所指位置的元素起向前逐一搜索到第一個比 pivot 小的元素,并將其設置到 low 所指的位置;然后從 low 所指位置的元素起向后逐一搜索到第一個比 pivot 大的元素,并將其設置到 high 所指的位置;不斷重復上述兩步直到 low = high 為止,最后將 pivot 設置到 low 與 high 共同指向的位置。

圖示劃分:

代碼實現(xiàn):

import java.util.Arrays;
 
public class QuickSortTest {
    public static void main(String[] args){
        Integer[] arr = {5,2,7,3,9,10,8,6,1,4};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
 
    //排序方法-假設從小到大排序
    public static void quickSort(Integer[] arr,int low,int high){
        if(low < high){
            int part=partition(arr,low,high);
            //遞歸調(diào)用
            quickSort(arr,low,part-1);
            quickSort(arr,part+1,high);
        }
    }
 
    //劃分方法
    private static int partition(Integer[] arr,int low,int high){
        //使用 r[low]作為樞軸元素
        int pivot = arr[low];
        //從兩端交替向內(nèi)掃描
        while(low < high){
            while(low<high && arr[high] >= pivot) {high--;}
            //將比 pivot 小的元素移向低端
            arr[low] = arr[high];
            while(low<high && arr[low] <= pivot){low++;}
            //將比 pivot 大的元素移向高端
            arr[high] = arr[low];
        }
        //設置樞軸
        arr[low]=pivot;
        //返回樞軸元素位置
        return low;
    }
 
}

空間效率:

快速排序需要一個堆棧來實現(xiàn)遞歸。若每次劃分都將序列均勻分割為長度相近的兩個子序列,則堆棧的最大深度為 log n,但是,在最壞的情況下,堆棧的最大深度為 n。

時間效率:

快速排序算法的運行時間依賴于劃分是否平衡,即根據(jù)樞軸元素 pivot 將序列劃分為兩個子序列中的元素個數(shù),而劃分是否平衡又依賴于所使用的樞軸元素。下面我們在不同的情況下來分析快速排序的漸進時間復雜度。

快速排序的最壞情況是,每次進行劃分時,在所得到的兩個子序列中有一個子序列為空。在快速排序過程中,如果總是選擇r[low]作為樞軸元素,則在待排序序列本身已經(jīng)有序或逆向有序時,快速排序的時間復雜度為Ο(n2)。

快速排序的最好情況是,在每次劃分時,都將序列一分為二,正好在序列中間將序列分成長度相等的兩個子序列。此時,算法的時間復雜度T(n) = Θ(n log n)。

在平均情況下,快速排序的時間復雜度 T(n) = kn ㏑ n,其中 k 為某個常數(shù),經(jīng)驗證明,在所有同數(shù)量級的排序方法中,快速排序的常數(shù)因子 k 是最小的。因此就平均時間而言,快速排序被認為是目前最好的一種內(nèi)部排序方法。
快速排序的平均性能最好,但是,若待排序序列初始時已按關(guān)鍵字有序或基本有序,則快速排序退化為冒泡排序,其時間復雜度為Ο(n2)。為改進之,可以采取隨機選擇樞軸元素pivot的方法,具體做法是,在待劃分的序列中隨機選擇一個元素然后與r[low]交換,再將r[low]作為樞軸元素,作如此改進之后將極大改進快速排序在序列有序或基本有序時的性能,在待排序元素個數(shù)n較大時,其運行過程中出現(xiàn)最壞情況的可能性可以認為不存在。

到此這篇關(guān)于Java快速排序案例講解的文章就介紹到這了,更多相關(guān)Java快速排序詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Spring中如何處理循環(huán)依賴問題

    在Spring中如何處理循環(huán)依賴問題

    Spring解決循環(huán)依賴的關(guān)鍵在于提前曝光未完全創(chuàng)建的bean,在Spring中創(chuàng)建Bean分為實例化、屬性填充和初始化三步,循環(huán)依賴的解決思路是先創(chuàng)建A的bean實例,此時A是不完整的,用一個Map保存不完整的A,再創(chuàng)建B,B需要注入A
    2025-01-01
  • Spring Boot中l(wèi)ombok的安裝與使用詳解

    Spring Boot中l(wèi)ombok的安裝與使用詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot中l(wèi)ombok安裝與使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • java實現(xiàn)清理DNS Cache的方法

    java實現(xiàn)清理DNS Cache的方法

    這篇文章主要介紹了java實現(xiàn)清理DNS Cache的方法,分析了幾種常用的清理方法,并給出了反射清理的完整實例,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 詳解如何提升SpringBoot項目的吞吐量

    詳解如何提升SpringBoot項目的吞吐量

    吞吐量是指系統(tǒng)在單位時間內(nèi)成功處理請求的數(shù)量,當吞吐量不足以應對業(yè)務需求時,會導致請求Pile Up的情況發(fā)生,使系統(tǒng)不可用甚至宕機,所以提高吞吐量是保證系統(tǒng)可用性的有效手段之一,本文就給大家講講如何提升SpringBoot項目的吞吐量
    2023-07-07
  • Springboot使用Rabbitmq的延時隊列+死信隊列實現(xiàn)消息延期消費

    Springboot使用Rabbitmq的延時隊列+死信隊列實現(xiàn)消息延期消費

    本文介紹了RabbitMQ的延時隊列和死信隊列,解釋了它們的工作原理及其應用場景,延時隊列允許消息在設定的時間后被消費,結(jié)合實際案例,展示了如何實現(xiàn)和使用延時隊列和死信隊列,感興趣的朋友一起看看吧
    2025-01-01
  • 使用springBoot項目配置文件位置調(diào)整到打包外

    使用springBoot項目配置文件位置調(diào)整到打包外

    這篇文章主要介紹了使用springBoot項目配置文件位置調(diào)整到打包外,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • java.imageIo給圖片添加水印的實現(xiàn)代碼

    java.imageIo給圖片添加水印的實現(xiàn)代碼

    最近項目在做一個商城項目, 項目上的圖片要添加水?、?添加圖片水印;②:添加文字水印;一下提供下個方法,希望大家可以用得著
    2013-07-07
  • Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    這篇文章主要給大家介紹了關(guān)于Java請求調(diào)用參數(shù)格式為form-data類型的接口的相關(guān)資料,文中給出了詳細的代碼示例,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 詳解spring切面使用傳遞給被通知方法的參數(shù)

    詳解spring切面使用傳遞給被通知方法的參數(shù)

    本篇文章主要介紹了詳解spring切面使用傳遞給被通知方法的參數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Spring?Boot?集成Elasticsearch模塊實現(xiàn)簡單查詢功能

    Spring?Boot?集成Elasticsearch模塊實現(xiàn)簡單查詢功能

    本文講解了Spring?Boot集成Elasticsearch采用的是ES模板的方式實現(xiàn)基礎查詢,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-06-06

最新評論

金沙县| 漳州市| 舟山市| 原阳县| 徐闻县| 甘洛县| 东光县| 鄂托克前旗| 简阳市| 祥云县| 青河县| 玛沁县| 桑日县| 宝鸡市| 阳朔县| 紫金县| 乌拉特后旗| 灵丘县| 那曲县| 常德市| 崇礼县| 广水市| 甘孜| 常德市| 霍林郭勒市| 延川县| 通榆县| 兴国县| 龙口市| 伊吾县| 新河县| 海安县| 石渠县| 二连浩特市| 师宗县| 内黄县| 桐柏县| 韶山市| 偃师市| 府谷县| 江川县|