《算法導論》學習心得(五)—— 快排(Java)

        快排(QuickSort):顧名思義就是很快的排序,達到排序算法效率的緊確界。是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。如圖:

java實現:

package com.tangbo;

import java.util.Random;
import java.util.Scanner;

public class QuickSort {
	static Scanner scanner;
	static Random random = new Random();
	public static void main(String[] args) {
		int[] array = productArray();
		print(quickSort(array, 0, array.length-1));
	}
	static void print(int []array)//打印函數
	{
		for(int i=0;i<array.length;i++)
		{
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
	static int [] productArray()//生成一個數組
	{
		int arrayayLength=0;
		System.out.println("請輸入數組長度:");
		scanner = new Scanner(System.in);
		arrayayLength = scanner.nextInt();
		int [] arrayayTemp = new int[arrayayLength];
		for (int i = 0; i < arrayayLength; i++) {
			arrayayTemp[i]=random.nextInt(1000);
		}
		return arrayayTemp;
	}
	public static int [] quickSort(int [] array,int beginIndex,int endIndex)
	{
		int breakpoint;
		if(beginIndex<endIndex)
		{
			breakpoint = partition(array, beginIndex, endIndex);//的到分割點
			quickSort(array, beginIndex, breakpoint-1);//迭代排下半段
			quickSort(array, breakpoint+1, endIndex);//迭代排上半段
		}
		return array;
	}
	public static int partition(int [] array,int beginIndex,int endIndex)
	{
		int sentry = array[endIndex];//把最後一個元素作爲哨兵,也就是算法導論裏講的主元
		int temp=0;
		int breakpoint = beginIndex-1;
		for(int j = beginIndex;j<=endIndex;j++)
		{
			if(array[j]<sentry)//如果這個元素比哨兵小,分割點向前移動,並且把這個小於哨兵的元素放到前面
			{
				breakpoint++;
				temp = array[j];
				array[j] = array[breakpoint];
				array[breakpoint] = temp;
			}
		}
		array[endIndex] = array[breakpoint+1];//把哨兵放到中間位置
		array[breakpoint+1] = sentry;
		return breakpoint+1;
	}

}



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