日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

划分_快速排序的前提技术

發布時間:2024/6/21 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 划分_快速排序的前提技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以定義的某個值為劃分點,將小于它的都放在一邊,大于它的放在另一邊,并不是排序。
在劃分的過程中有兩個標記,他們分別從左邊,右邊開始尋找高于劃分點的值,低于劃分點的值。

public class ArrayPar {
    private long [] a;
    private int nElems;
    public ArrayPar(int maxSize) {
        a=new long[maxSize];
        nElems=0;
    }
    public void insert(long value) {
        a[nElems]=value;
        nElems++;
    }
    public int size() {
        return nElems;
    }
    public void display() {
        for(int j=0;j<nElems;j++) {
            System.out.print(a[j]+" ");
        }
        System.out.println();
    }
    public int partitionIt(int left,int right,long pivot) {
        int leftPtr=left-1;//為什么要-1
        int rightPtr=right+1;//為什么要+1
        //初始值不是left,right的原因是經過循環之后他們的值會發生改變++leftPtr,--rightPtr,swap()就是改變之后的值
        //如果swap(0,10),本來的意圖,在錯誤的情況下,最終swap(1,9),在正確的初始值情況下就是swap(0,10)
        while(true) {
            //左邊找大于特定值的
            while(leftPtr<right && a[++leftPtr]<pivot);
            //右邊找小于特定值的
            while(rightPtr>left && a[--rightPtr]>pivot);
            if(leftPtr>=rightPtr)
                break;
            else
                //交換指向的值
                swap(leftPtr, rightPtr);
        }
        return leftPtr;
        
        /*
         * 可以這樣寫(但是按上面寫的思路就更清晰一些)
         * 
         * int leftPtr=left;
          int rightPtr=right;
        while(true) {
            //左邊找大于特定值的
            while(leftPtr<right && a[leftPtr++]<pivot);
            //右邊找小于特定值的
            while(rightPtr>left && a[rightPtr--]>pivot);
            if(leftPtr>=rightPtr+2)
                break;
            else
                //交換指向的值
                swap(leftPtr-1, rightPtr+1);
        }
        return leftPtr-1;
         * 
         * 
         */
        
    }
    public void swap(int dex1,int dex2) {
        long temp;
        temp=a[dex1];
        a[dex1]=a[dex2];
        a[dex2]=temp;
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

}
public class Test {

    public static void main(String[] args) {
        int maxSize=100;
        ArrayPar arrayPar=new ArrayPar(maxSize);
        arrayPar.insert(60);
        arrayPar.insert(30);
        
        arrayPar.insert(80);
        arrayPar.insert(10);
        arrayPar.insert(70);
        arrayPar.insert(90);
        arrayPar.insert(00);
        arrayPar.insert(20);
        arrayPar.insert(40);
        arrayPar.display();
        arrayPar.partitionIt(0, arrayPar.size()-1, 50);
        arrayPar.display();

    }

}

}

總結

以上是生活随笔為你收集整理的划分_快速排序的前提技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。