快速排序的实现(两种)

package Sort;

public class Quick {
	public static void main(String[] args) {
		int[] a = {96,68,45,32,21,11,10,9,8,7,3,6};
		quick_sort(a,0,a.length-1);
		for(int i = 0;i < a.length;i++){
			System.out.print(a[i]+" ");
		}
	}

	private static void quick_sort(int[] a, int low, int high) {//在发现要找的元素后并不急着就进行位置安放,而是等待另一边也找到合适元素,然后交换。
		// TODO Auto-generated method stub
		if(low > high)
			return;
		int i = low, j = high;
		int temp = a[low];
		int t;
		while(i < j){//保证在进行一次替换位置后如果ij没有相遇,能够继续,直到相遇。。
			while(i < j && a[j] >= temp){//这里必须有i<j的限制,要不然如果找不到a[j] >= temp的,就跑出去了
				j--;
			}
			while(i < j && a[i] <= temp){
				i++;
			}
			t = a[j]; //这里我省去了判断i<j 然而似乎并没有什么影响
			a[j] = a[i];
			a[i] = t;
		}
		a[low] = a[i]; //交换a[low]和a[i]
		a[i] = temp;
		
		quick_sort(a,low,i-1);
		quick_sort(a,i+1,high);
	}

//	private static void quick_sort(int[] a, int low, int high) {//第一个元素是个缺口,在后面的扫描中只要发现一个要调换位置的元素就放到这个缺口处,然后那个元素原来的位置就是新的缺口
//		// TODO Auto-generated method stub						//不断发现新的缺口一直调换
//		if(low > high)
//			return;
//		int i = low,j = high;
//		int temp = a[low];
//		while(i < j){//保证在进行一次替换位置后如果ij没有相遇,能够继续,直到相遇。。
//			while(i < j && a[j] >= temp){//必须从右边开始扫描,否则从左边开始扫描遇到一个比它大的元素时 应该放到右边,放到哪里呢,放到任何地方都会覆盖掉一个数据 这样没有利用上这个缺口 严重错误
//				j--;
//			}
//			a[i] = a[j];//这里我省去了判断i<j 然而似乎并没有什么影响
//			while(i < j && a[i] <= temp){
//				i++;
//			}
//			a[j] = a[i];//这里我省去了判断i<j 然而似乎并没有什么影响
//	    }
//	  a[i] = temp; //把最开始要进行排序的那个元素放到正确的中间位置。这时,他左边的数比它小,右边的比它大。
//	  quick_sort(a,low,i-1);
//	  quick_sort(a,i+1,high);
//   }
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值