分治法--快速排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
	}
	
}



猜你喜欢

转载自blog.csdn.net/Spring_East/article/details/73747440