1. 程式人生 > >【算法系列】——Java實現冒泡&&快速

【算法系列】——Java實現冒泡&&快速

/**  
  * @Title:  quickSort.java
  * @Package cn.xiaojia.test
  * @Description: 
  * @author 賈文靜
  * @date  2017年8月8日 下午5:24:54
  * @version V1.0  
  * Update Logs:
* ****************************************************
* Name:
* Date:
* Description:
******************************************************
*/
package cn.xiaojia.test;
import java.util.Arrays;
public class quickSort {

	private static int num = 0;
	public static void main(String[] args) {
		int[] a = { 51, 46, 20, 18, 65, 97, 82, 30, 77, 50 };
		System.out.println("陣列的初識資料:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println();
		quick(a,0,a.length-1);
		System.out.println("陣列最終排序結果:");
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
		}
	}
	public static void quick(int[] list,int low,int high){
		if (list.length>0 && low<high) {
			int middle = getMiddle(list, low, high);
			quick(list, low, middle-1);
			quick(list, middle+1, high);
		}
	}
	/**
	* @Title: getMiddle
	* @Description: 選取中間值
	* @author 賈文靜
	* @param list 陣列
	* @param low  最小座標
	* @param high 最高位座標
	* @return
	* @throws
	* @date:2017年8月11日.下午7:44:44
	 */
	public static int getMiddle(int[] list,int low,int high){
//		計算執行次數
		num++;
		//選擇第一個數作為軸值,存放於臨時變數中
		int temp = list[low];
		//保證一致正序選擇
		while (low<high) {
			//保證正序的前提下(從左到右),如果右側大於軸值,則判斷右側資料的下一個
			while (low<high && list[high]>temp) {
				high--;
			}
			//在右側找到小於temp軸值的數,則進行交換
			list[low]=list[high];
			//保證正序的前提下(從左到右),如果左側小於軸值,則判斷左側資料的下一個
			while (low<high && list[low]<=temp) {
				low++;
			}
			//在左側找到大於temp軸值的數,則進行交換
			list[high]=list[low];
		}
		list[low]=temp;
		System.out.println("執行了第"+num+"次");
		for (int i = 0; i < list.length; i++) {
			System.out.print(list[i]+" ");
		}
		System.out.println();
		return low;
	}
}