成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

zzzmh / 3320人閱讀

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

以上為思路。
總的來說,快速排序也是利用了分治法的思想。
基本步驟: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://m.hztianpu.com/yun/71240.html

相關(guān)文章

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

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

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

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

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

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

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

    摘要:前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來做一個(gè)歸總。直到無序區(qū)中的數(shù)為零,結(jié)束排序。步驟以從小到大為例,排序數(shù)組大小為。比較完以后則排序結(jié)束。堆排序思想堆排序是采用樹的形式的數(shù)據(jù)結(jié)構(gòu)來進(jìn)行排序的,其中每一個(gè)堆都是完全二叉樹。 前面介紹了七大算法的思想與實(shí)現(xiàn)步驟,下面來做一個(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元查看
<