成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

java實(shí)現(xiàn)快速排序

zzzmh / 3268人閱讀

摘要:總的來(lái)說(shuō),快速排序也是利用了分治法的思想??焖倥判虻臅r(shí)間復(fù)雜度為,這是一種不穩(wěn)定的排序方法。以下代碼實(shí)現(xiàn)以二分法的思路對(duì)數(shù)組分組以最左邊最右邊中間三個(gè)數(shù)的中位數(shù)為主元確定主元

以上為思路。
總的來(lái)說(shuō),快速排序也是利用了分治法的思想。
基本步驟:1.先選擇好合適的主元pivot,
2.然后再把比主元小的元素放到主元的左邊(右邊),把較大的元素放到主元的右邊(左邊),
3.接著再以主元為分界點(diǎn),把數(shù)組分為兩個(gè)部分,再分別對(duì)兩邊的數(shù)組重復(fù)第二步的操作,
4.最后便實(shí)現(xiàn)了有序排列。

快速排序的時(shí)間復(fù)雜度為O(NlgN),這是一種不穩(wěn)定的排序方法。

以下代碼實(shí)現(xiàn)

public static void quickSort(int arr[], int left, int right) {
        int index = partition(arr, left, right);
        
        if (left < index - 1)
            quickSort(arr, left, index - 1);
    
        if (index < right)
            quickSort(arr, index, right);
    }
    //以二分法的思路對(duì)數(shù)組分組
    private static int partition(int arr[], int left, int right){
        int i = left, j = right;
        int tmp;
        //以最左邊、最右邊、中間三個(gè)數(shù)的中位數(shù)為主元
        int pivot = findPivot(arr, left, (left+right)>>1, right);
  
        while (i <= j) {
      
            while (arr[i] < pivot)
                i++;

            while (arr[j] > pivot)
                j--;

            if (i <= j) {
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
                i++;
                j--;
            }
        }
  
        return i;
    }
    //確定主元
    private static int findPivot(int[] nums, int left, int mid, int right){
        if(nums[left] > nums[right]) {
            int temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
        }
        
        if(nums[left] > nums[mid]) {
            int temp = nums[left];
            nums[left] = nums[mid];
            nums[mid] = temp;
        }
        
        if(nums[mid] > nums[right]) {
            int temp = nums[right];
            nums[right] = nums[mid];
            nums[mid] = temp;
        }
        return  nums[mid];
    }

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71240.html

相關(guān)文章

  • 算法學(xué)習(xí)之路,排序快速排序Java實(shí)現(xiàn)

    摘要:接下來(lái)我來(lái)說(shuō)明快速排序的思路以及實(shí)現(xiàn)的代碼??焖倥判蛩悸肥紫仁嵌x一個(gè)變量,把數(shù)組的第一個(gè)元素的值賦給,然后定義兩個(gè)變量指向數(shù)組的第一個(gè)元素和最后一個(gè)元素。 今天突然想寫(xiě)個(gè)排序,以前寫(xiě)過(guò),然后寫(xiě)了之后一直出錯(cuò),然后自己百度了一下,看了別人寫(xiě)的方法,自己也嘗試著寫(xiě)了一個(gè)。接下來(lái)我來(lái)說(shuō)明快速排序的思路以及實(shí)現(xiàn)的代碼。 快速排序思路:首先是定義一個(gè)變量key,把數(shù)組的第一個(gè)元素的值賦給key...

    charles_paul 評(píng)論0 收藏0
  • java排序算法(快速排序)

    摘要:快速排序思路在數(shù)組中尋一中間數(shù),將比中間數(shù)小的放在左邊,將比中間數(shù)大的放在右邊從左邊開(kāi)始找,找到比中間數(shù)大的,記住,從右邊開(kāi)始找,找到比中間數(shù)小的,然后交換兩邊然后在左邊再尋一中間數(shù),同坐上面的事,右邊也一樣,然后循環(huán)實(shí)現(xiàn)數(shù)組輸出中間值的位 快速排序 思路 在數(shù)組中尋一中間數(shù),將比中間數(shù)小的放在左邊,將比中間數(shù)大的放在右邊從左邊開(kāi)始找,找到比中間數(shù)大的,記住,從右邊開(kāi)始找,找到比中間數(shù)...

    khlbat 評(píng)論0 收藏0
  • 跳槽季如何快速全面復(fù)習(xí)面試題

    摘要:排序算法和集合工具類(lèi)排序算法和集合工具類(lèi)。面試官總是問(wèn)排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡(jiǎn)單,整個(gè)并發(fā)包下面的工具都是在為多線程服務(wù)。 去年的這個(gè)時(shí)候樓主通過(guò)兩個(gè)月的復(fù)習(xí)拿到了阿里巴巴的 offer,有一些運(yùn)氣,也有一些心得,借著跳槽季來(lái)臨特此分享出來(lái)。簡(jiǎn)單梳理一下我的復(fù)習(xí)思路,同時(shí)也希望和大家一起交流討論,一起學(xué)習(xí),如果不對(duì)之處歡迎指正一...

    keke 評(píng)論0 收藏0
  • 七大排序算法總結(jié)(java)

    摘要:前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來(lái)做一個(gè)歸總。直到無(wú)序區(qū)中的數(shù)為零,結(jié)束排序。步驟以從小到大為例,排序數(shù)組大小為。比較完以后則排序結(jié)束。堆排序思想堆排序是采用樹(shù)的形式的數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行排序的,其中每一個(gè)堆都是完全二叉樹(shù)。 前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來(lái)做一個(gè)歸總。 排序方法 平均復(fù)雜度 最壞復(fù)雜度 最好復(fù)雜度 輔助空間 穩(wěn)定性 直接選擇排序 O(n^2...

    cartoon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zzzmh

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<