1. 程式人生 > >排序演算法---快速排序

排序演算法---快速排序

          快速排序是對氣泡排序的改進,通過一趟排序將要排序的資料分割成獨立的兩個部分,其中一部分的所有資料比另一個部分的所有資料要小,再按照這種方法遞迴進行,使得整個資料變成有序序列。

        

        快速排序有一個比較簡單的解法--遞迴,具體的實現程式碼如下:

package com.threeTop.www;

/**
 * 快速排序的遞迴實現
 * @author wjgs
 *
 */
public class QuickSort {
      
	 private int[] array;
	 
	 //初始化操作
	 public QuickSort(int []array)
	 {
		 this.array=array;
		 
	 }
	 
	 public void sort()
	 {
		 quicksort(array,0,array.length-1);
	 }
	 
	/**
	 * 遞迴實現快速排序過程
	 * @param array
	 * @param i
	 * @param j
	 */
	private void quicksort(int[] array, int begin, int end) {
		// TODO Auto-generated method stub
		if(begin<end)
		{
			int key=array[begin]; //設定第一個元素為基準元素
			int i=begin;
			int j=end;
			
			while(i<j)
			{
			  while(i<j&&array[j]>key)
			  {
				  j--;
			  }
			  if(i<j)
			  {
				  array[i]=array[j];
				  i++;
			  }
			  while(i<j&&array[i]<key)
			  {
				  i++;
			  }
			  if(i<j)
			  {
				  array[j]=array[i];
				  j--;
			  }
			  array[i]=key;  //放置基準元素
			  
			  
			  quicksort(array,begin,i-1);
			  
			  quicksort(array,i+1,end);
			  
			}
			
			
		}
		
	}
	
	public void print()
	{
		for(int i=0;i<array.length;i++)
		{
			System.out.print(array[i]+" ");
		}
	}
	

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		int []array={5,9,1,9,5,3,7,6,1,10};
		QuickSort quicksort=new QuickSort(array);
	    quicksort.sort();
	    quicksort.print();

	}

}


快速排序的優化

       (1)三者取中法:頭、尾、中間取中間數作為基準值

       (2)根據規模大小改變演算法

       (3)其他分割槽方案考慮:例如分三個區間

       (4)並行處理:採用計算機多執行緒並行處理來提高效率