java 快排的思路與算法

                                                                            java 快排的思路與算法java

    有時候面試的時候的會問道Arrays.sort()是怎麼實現的,我之前根本不知道是什麼東西,最近點進去看了一下。直接嚇傻,面試

  //看到這個時候仍是比較淡定的,可怕的事情來了。
  public static void sort(int[] a) {
        DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
    }

    點進這裏面看了一下,頓時沒有看下去的慾望了。算法

DualPivotQuicksort//共有3079行

    從網上找一個分析流程圖(算法看流程圖是最好的):圖片網址來自http://www.tuicool.com/articles/BfY7Nz(感謝)數組

    咱們確定沒有辦法一會兒就寫出這樣的代碼,因此先來了解每一個算法的實現是最基本的,後面爭取本身整合一個。
less

    此次先實現的快速排序算法(DualPivotQuicksort類名一半是):
ui

    

public class Sort {
	static boolean less(int a, int b){
		return a<b;
	}
	
	static void exch(int array[],int i,int j){
		int temp=array[i];
		array[i]=array[j];
		array[j]=temp;
	}
	
	static void comExch(int array[],int i,int j){
		if(less(array[j],array[i]))
			exch(array,i,j);
	}
	
	//掃描
	static int partition(int a[],int l,int r){
		int i=l-1,j=r;
		int v=a[r];
		for(;;){
			while(less(a[++i],v));
			while(less(v,a[--j])){
				if(j==l)break;
			}
			if(i>=j)break;
			exch(a,i,j);
		}
		exch(a,i,r);
		return i;
	}
	//快速排序
	static void quicksort(int a[],int l,int r){
		if(r<=l)return;
		int i=partition(a, l, r);
		quicksort(a,l,i-1);
		quicksort(a,i+1,r);
	}
	public static void main(String args[]){
		int array[]={1,3,2,5,4,9,8,0};
		quicksort(array,0,7);
		for(Integer n:array){
			System.out.println(n);
		}
	}
}

    設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(一般選用數組的最後一個數)做爲關鍵數據,而後將全部比它小的數都放到它前面,全部比它大的數都放到它後面,這個過程稱爲一趟快速排序。值得注意的是,快速排序不是一種穩定的排序算法,也就是說,多個相同的值的相對位置也許會在算法結束時產生變更。spa

    這個只是最簡單的快排,只是類的一半,另外一半等我搞懂爲何要分軸區的時候再補充算法。
code

相關文章
相關標籤/搜索