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

快速排序的深入詳解以及java實現(xiàn)

 更新時間:2013年07月03日 08:59:30   作者:  
本篇文章是對java中的快速排序進行了詳細的分析介紹,需要的朋友參考下
快速排序作為一種高效的排序算法被廣泛應用,SUN的JDK中的Arrays.sort 方法用的就是快排。
快排采用了經典的分治思想(divide and conquer):

Divide:選取一個基元X(一般選取數組第一個元素),通過某種分區(qū)操作(partitioning)將數組劃分為兩個部分:左半部分小于等于X,右半部分大于等于X。
Conquer: 左右兩個子數組遞歸地調用Divide過程。
Combine:快排作為就地排序算法(in place sort),不需要任何合并操作
可以看出快排的核心部分就是劃分過程(partitioning),下面以一個實例來詳細解釋如何劃分數組(圖取自于《算法導論》)
初始化:選取基元P=2,就是數組首元素。i=1,j=i+1=2 (數組下標以1開頭)
循環(huán)不變量:2~i之間的元素都小于或等于P,i+1~j之間的元素都大于或等于P

循環(huán)過程:j從2到n,考察j位置的元素,如果大于等于P,就繼續(xù)循環(huán)。如果小于P,就將j位置的元素(不應該出現(xiàn)在i+1~j這個區(qū)間)和i+1位置(交換之后仍在i+1~j區(qū)間)的元素交換位置,同時將i+1.這樣就維持了循環(huán)不變量(見上述循環(huán)不變量說明)。直到j=n,完成最后一次循環(huán)操作。
要注意的是在完成循環(huán)后,還需要將i位置的元素和數組首元素交換以滿足我們最先設定的要求(對應圖中的第i步)。

細心的讀者可能會想到另一種更直白的分區(qū)方法,即將基元取出存在另一相同大小數組中,遇到比基元小的元素就存儲在數組左半部分,遇到比基元大的元素就存儲在數組右半部分。這樣的操作復雜度也是線性的,即Theta(n)。但是空間復雜度提高了一倍。這也是快排就地排序的優(yōu)勢所在。

復制代碼 代碼如下:

public class QuickSort {
    private static void QuickSort(int[] array,int start,int end)
    {
        if(start<end)
        {
            int key=array[start];//初始化保存基元
            int i=start,j;//初始化i,j
            for(j=start+1;j<=end;j++)

                if(array[j]<key)//如果此處元素小于基元,則把此元素和i+1處元素交換,并將i加1,如大于或等于基元則繼續(xù)循環(huán)
                {
                    int temp=array[j];
                    array[j]=array[i+1];
                    array[i+1]=temp;
                    i++;
                }

            }
            array[start]=array[i];//交換i處元素和基元
            array[i]=key;
            QuickSort(array, start, i-1);//遞歸調用
            QuickSort(array, i+1, end);

        }

    }
    public static void main(String[] args)
    {
        int[] array=new int[]{11,213,134,44,77,78,23,43};
        QuickSort(array, 0, array.length-1);
        for(int i=0;i<array.length;i++)
        {
            System.out.println((i+1)+"th:"+array[i]);
        }
    }
}

相關文章

  • java異步方式實現(xiàn)登錄

    java異步方式實現(xiàn)登錄

    這篇文章主要為大家詳細介紹了java異步方式實現(xiàn)登錄的相關資料,感興趣的朋友可以參考一下
    2016-05-05
  • Java自定義注解實現(xiàn)數據脫敏

    Java自定義注解實現(xiàn)數據脫敏

    在實際開發(fā)中經常會遇到有一些信息不能全部展示用戶,需要隱藏(可以叫脫敏),所以本文為大家分享了利用自定義注解實現(xiàn)數據脫敏的示例代碼,需要的可以參考下
    2023-07-07
  • idea遠程Debug部署在服務器上的服務

    idea遠程Debug部署在服務器上的服務

    在開發(fā)的時候我們通常在本地代碼上debug程序,但是服務部署到了開發(fā)環(huán)境服務器上,如何遠程調試,本文主要介紹了idea遠程Debug部署在服務器上的服務,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 理解JPA注解@GeneratedValue的使用方法

    理解JPA注解@GeneratedValue的使用方法

    這篇文章主要介紹了理解JPA注解@GeneratedValue的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • SpringBoot配置Profile實現(xiàn)多環(huán)境支持

    SpringBoot配置Profile實現(xiàn)多環(huán)境支持

    這篇文章主要介紹了SpringBoot配置Profile實現(xiàn)多環(huán)境支持操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • @Valid和@Validated注解校驗以及異常處理方式

    @Valid和@Validated注解校驗以及異常處理方式

    在Javaweb開發(fā)中,防止數據庫惡意攻擊是至關重要的,盡管前端校驗可以起到一定的篩選作用,但通過工具如postman直接對后端發(fā)起請求的情況仍然需要后端進行嚴格的數據校驗,Java生態(tài)下,@Valid注解配合SpringBoot提供了一個便捷高效的后端數據校驗方案
    2024-11-11
  • Java編程關于子類重寫父類方法問題的理解

    Java編程關于子類重寫父類方法問題的理解

    這篇文章主要介紹了Java編程關于子類重寫父類方法問題的理解,分享了有關子類重寫父類的實例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 淺析java 的 static 關鍵字用法

    淺析java 的 static 關鍵字用法

    這篇文章主要介紹了淺析java 的 static 關鍵字用法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 輕松掌握Java策略模式

    輕松掌握Java策略模式

    這篇文章主要幫助大家輕松掌握Java策略模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • java使用DelayQueue實現(xiàn)延時任務

    java使用DelayQueue實現(xiàn)延時任務

    項目中經常會用到類似一些需要延遲執(zhí)行的功能,比如緩存,java提供了DelayQueue來很輕松的實現(xiàn)這種功能,下面小編就來和大家介紹一下如何使用DelayQueue實現(xiàn)延時任務吧
    2023-10-10

最新評論

德庆县| 平湖市| 灵武市| 鄂尔多斯市| 来宾市| 开封市| 正蓝旗| 铜川市| 宁强县| 泌阳县| 长春市| 噶尔县| 曲阜市| 黄山市| 台中市| 宜昌市| 北宁市| 福泉市| 阳东县| 辽阳市| 平南县| 手游| 镇原县| 上林县| 万安县| 明星| 宁阳县| 富宁县| 固阳县| 遂平县| 昭觉县| 漾濞| 长春市| 塔城市| 霍山县| 凤山县| 皋兰县| 蒙城县| 美姑县| 陆良县| 广河县|