快速排序


public class QucikSort {
   public int division (int [] list,int left,int right){
	   //以最左边的数(left)为基准
	   int base=list[left];
	   while(left<right){
		   //从序列右端开始,向左遍历,直到找到小于base的数
		   while(left<right&& list[right]>=base)
			   right--;
		   //找到 了比base小的元素,将这个元素放到最左边的位置
		  list[left]=list[right];
		  //从序列左边开始,向右遍历,直到找到大于base的数
		  while(left<right&& list[left]<=base)
			  left++;
		  //找到了比base大的元素,将这个元素放到最右边的位置
		  list[right]=list[left];
		   
	   }
	   //最后将base放到left位置,此时,left位置的左侧数值应该都比left小
	   //而left位置的右侧数值应该都比left大
	   list[left]=base;
	   return left;
   }
   private void quickSort(int [] list,int left,int right){
	  //左下标一定小于有下标,否则就越界了
	   if(left<right){
		   //对数组进行分割,取出下次分割的基准标号
		   int base=division(list,left,right);
		   System.out.format("base=%d: ",list[base]);
		   printPart(list,left,right);
		   //对基准标号左侧的数值进行递归的切割,以至于将这些数值完整的排序
		   
		   quickSort(list,left,base-1);
		   
		   //对基准标号右侧的数值进行递归的切割,以至于将这些数值完整的排序
		   
		   quickSort(list,base+1,right);
	   }
   }
   //打印序列
   public void printPart(int [] list,int begin,int end){
	   for(int i=0;i<begin;i++){
		   System.out.print(" ");
	   }
	   for(int i=begin;i<=end;i++){
		   System.out.print(list[i]+" ");
	   }
	   System.out.println();
   }
   public static void main(String[] args){
	   //初始化一个序列
	   int [] array={1,3,4,5,6,9,7,8,0};
	   //调用快速排序法
	   QucikSort quick=new QucikSort();
	   System.out.print("排序前:");
	   quick.printPart(array, 0, array.length-1);
	   quick.quickSort(array,0,array.length-1);
	   System.out.print("排序后:");
	   quick.printPart(array,0,array.length-1);
   }
}









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值