快速排序

算法思想

     選擇一個基準元素,一般選擇第一個元素或者最後一個元素,經過一次掃描,將待排序列分紅兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在器拍好序後的正確位置,而後在用一樣的方法遞歸地劃分的兩部分。 java

實例演示

代碼實現

package test.algorithm.FastSlowPointer;

public class QuickSort {
	
	/**
	 * 元素交換
	 * @param k
	 * @param low
	 * @param high
	 */
	public static void swap(int k[], int low, int high)
	{
		int temp;

		temp = k[low];
		k[low] = k[high];
		k[high] = temp;
	}
	
	/**
	 * 劃分
	 * @param list
	 * @param low
	 * @param high
	 * @return
	 */
	public static int partition(int[] list,int low,int high){
		 
		//數組的第一個做爲中值
		int point = list[low];
		
		while(low < high){
			
			//從高位遍歷,獲取比中值小的下標(high)
			while(low<high && list[high]>=point){
				high--;
			}
			
			//比中值小的記錄移到低端
			list[low] = list[high];   
			
			//從低位遍歷,獲取比中值大的下標 (low)
			while(low<high && list[low]<=point){
				low++;
			}
			
			//比中值大的記錄移到高端
			list[high] = list[low];   
		}
		
		// low和hight相等,這就是point在整個排序中的位置
		// 低端的都比 point小,高端的都比point大
		list[low] = point;              
		  
        return low; 
	}
	
	/**
	 * 快速排序
	 * @param list
	 * @param low
	 * @param high
	 */
	public static void QSort(int[] list, int low, int high){
		
		int point = 0;
		if(low < high){
			//將list數組進行一分爲二
			point = partition(list,low,high);
			
			//對低位序列進行遞歸排序
			QSort(list,low,point-1);
			//對高位序列進行遞歸排序
			QSort(list,point+1,high);
		}
		
	}
	
	/**
	 * 快速排序
	 * @param list
	 */
	public static void quickSort(int[] list){
		QSort(list,0,list.length-1);
	}

	public static void main(String[] args) {
		int[] list = {4, 2, 5, 0, 3, 9, 1, 7, 6, 8};

		quickSort(list);
		
		System.out.print("打印數組:");
		for(int i :list){
			System.out.print(i+" ");
		}
	}

}
相關文章
相關標籤/搜索