您的位置:首页 > 其它

快速排序的实现(两种)

2016-04-10 20:47 281 查看
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);
//   }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: