版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Spring_East/article/details/73747440
对于快速排序法的思想是用分治法解决问题,将一个大的问题分化成多个小问题进行解决。
每次以最左边的元素为中心,将比其小的元素放在其左边,比其大的元素放在其右边,然后对其左边和右边的元素分别如此进行递归操作,如此便可以将元素进行从小到大的排序。
若要进行从大到小的排序,则将比其大的放在其左边,比其小的放在右边,如此递归则可以得到从大到小的排序。
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;
}
}