快速排序算法

快速排序的原理:選擇一個關鍵值作爲基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第一個元素。

一次循環:從後往前比較,用基準值和最後一個值比較,如果比基準值小的交換位置,如果沒有繼續比較下一個,直到找到第一個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下一個,直到找到第一個比基準值大的值才交換。直到從前往後的比較索引>從後往前比較的索引,結束第一次循環,此時,對於基準值來說,左右兩邊就是有序的了。

接着分別比較左右兩邊的序列,重複上述的循環。


public class maopapSort {
    //關鍵值的位置一直在變化,在array[start]和array[end]來回交換
	public static void quickSort(int left,int right,int [] array)
	{
		int start=left;
		int end=right;
		int key=array[start];
	    //關鍵值的位置一直在變化,在array[start]和array[end]來回交換
		while(start<end)
		{
			//從後往前比較
            //如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,然後又從前往後比較
			while(end>start&&array[end]>key)
				end--;
			if(array[end]<key)
			{
				int num=array[end];
				array[end]=array[start];
				array[start]=num;
			}
	        
			 //從前往後比較
            //如果沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置
			while(end>start&&array[start]<key)
				start++;
			if(array[start]>key)
			{
				int num=array[end];
				array[end]=array[start];
				array[start]=num;
			}
		}
		 //遞歸
		if(start>left) quickSort(left,start-1,array);
		if(end<right) quickSort(end+1,right,array);
		
		
	}
	public static void main(String[] args) {
		int [] arr={9,8,7,6,5,4,3,2,1,0};
		//funtion(arr);
		quickSort(0,arr.length-1,arr);
		for(int i:arr)
		{
			System.out.println(i);
		}
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章