快速排序

public class Qsort{
	//使key后面的数组元素大于key,前面的元素小于key,最后返回key的下标 
	public static int cen(int a[],int start,int end) {
		int key;
		key=a[start];
		while(start<end) {
			while(start<end&&a[end]>=key)
				end--;
			if(start<end&&start!=end)
			{
				a[start]^=a[end];
				a[end]^=a[start];
				a[start]^=a[end];
			}
			while(start<end&&a[start]<=key)
				start++;
			if(start<end)
			{
				a[start]^=a[end];
				a[end]^=a[start];
				a[start]^=a[end];
			}
		}
		a[start]=key;
		return start;
	}
	public static void sort(int a[],int start,int end) {
		int pos=0;
		if(start<end) {
			pos=cen( a,start,end);
			sort(a,pos+1,end);//key左边递归同样的操作
			sort(a,start,pos-1);//key右边递归同样的操作
		}
	}
	public static void main(String args[]) {
		int a[]=new int [] {1,9,7,3,4};
		sort(a,0,a.length-1);
		for(int i=0;i<a.length;i++)
			System.out.println(a[i]);
	}
}

 原理:随机选出一个元素,数组排序循环重排序,使得左边的数小于该元素,右边的数大于该元素。重排序之后,再把元素左边的子数组和右边的子数组重新按照上一步骤执行。

posted @ 2021-11-01 19:13  *乐途*  阅读(29)  评论(0)    收藏  举报