对于快速排序法的思想是用分治法解决问题,将一个大的问题分化成多个小问题进行解决。
每次以最左边的元素为中心,将比其小的元素放在其左边,比其大的元素放在其右边,然后对其左边和右边的元素分别如此进行递归操作,如此便可以将元素进行从小到大的排序。
若要进行从大到小的排序,则将比其大的放在其左边,比其小的放在右边,如此递归则可以得到从大到小的排序。
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; } }