快速排序Java实现

快速排序主题思想:

分区法+挖坑填数法。 
  1、先从数列中取出一个数作为枢纽关键字,一般用第一个元素 
  2、分区过程,将比这个枢纽关键字大的数全放在它的右边,把小于或者等于的数全放在它左边 
  3、再对左右分区进行第二步的操作,也就是递归。知道各个区间只有一个数为止

时间复杂度:

快速排序不断的进行递归,将比枢纽关键字小的放在左边,否则放在右边,平均情况下需要递归log2N次,在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,需要递归n次,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。

public class Qsort {
	
	
	public  int partition (int a[],int low,int high)
	{
		int key=a[low];
		//int i=low;
		//int j=high;
		if(low<high)
		{
		while (low<high)
		{
			while (low<high&&a[high]>=key)//从右边循环直到找到比关键字小的项才退出
			{	
				high--;
			}
		
			if (low<high)  //将比关键字小的值赋值到左边
			{
				a[low]=a[high];
				low++;
			}	
			
			while (low<high&&a[low]<=key) //从左边循环直到找到比关键词大的项才退出
			{
				low++;
			}
			
		   if (low<high) //将比关键字大的值赋到右边
		   {
			a[high]=a[low];
			high--;
		   }
			          
		}
		a[low]=key;
		}
		
		
		return low;
	}
	
	public  void lsort(int a[],int low, int high)
	{
		if (low<high)
		{
		int i=partition(a,low,high);
		lsort(a,low,i-1);
		lsort(a,i+1,high);
		}
	}
	
	public static void main(String[] args)
	{ Qsort qs =new Qsort();
		int a[]={49,38,65,97,76,13,27,30}; 
		qs.lsort(a,0,a.length-1);
		for (int i:a)
		System.out.println(i);
		
	}

}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值