分治法--快速排序

来源:互联网 发布:dp901单片机说明书 编辑:程序博客网 时间:2024/06/05 14:47
对于快速排序法的思想是用分治法解决问题,将一个大的问题分化成多个小问题进行解决。
每次以最左边的元素为中心,将比其小的元素放在其左边,比其大的元素放在其右边,然后对其左边和右边的元素分别如此进行递归操作,如此便可以将元素进行从小到大的排序。
若要进行从大到小的排序,则将比其大的放在其左边,比其小的放在右边,如此递归则可以得到从大到小的排序。
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;}}



原创粉丝点击