分治法--快速排序
阿新 • • 發佈:2018-11-19
對於快速排序法的思想是用分治法解決問題,將一個大的問題分化成多個小問題進行解決。
每次以最左邊的元素為中心,將比其小的元素放在其左邊,比其大的元素放在其右邊,然後對其左邊和右邊的元素分別如此進行遞迴操作,如此便可以將元素進行從小到大的排序。
若要進行從大到小的排序,則將比其大的放在其左邊,比其小的放在右邊,如此遞迴則可以得到從大到小的排序。
import java.util.Arrays; public class QuickSort { public static void main(String[]args){ int []arr = {9,5,8,15,3,12,7,1,24,14,4,6}; //定義陣列,對陣列元素進行排序 int left=0; int right=arr.length-1; Quick(arr,left,right); //對陣列進行排序 System.out.println(Arrays.toString(arr)); } /** * 分治,劃分為小的問題 * 每次以最左邊元素為中心,將小於該元素的元素放在其左邊,大於該元素的元素放在其右邊 * @param arr * @param left * @param right */ public static void Quick(int []arr, int left, int right){ System.out.println(Arrays.toString(arr)); if(left<right){ int q = partition(arr,left,right); //計算排序後最左邊元素所在位置 Quick(arr, left, q-1); //左分治 Quick(arr, q+1, right); //右分治 } } public static int partition(int []arr, int left, int right){ int q=left,s; int t = arr[left]; for(int i=left+1;i<=right;i++){ if(arr[i]<t){ //判斷選中元素是否小於最左邊元素 s=arr[i]; //將選中元素進行備份 for(int j=i;j>left;j--){ //從left位置開始到i-1位置整體右移 arr[j]=arr[j-1]; } arr[left]=s; //將選中元素移動到left位置 q=q+1; //對t元素進行定位 } } return q; } }