码迷,mamicode.com
首页 > 编程语言 > 详细

排序之快速排序

时间:2015-01-06 23:20:45      阅读:510      评论:0      收藏:0      [点我收藏+]

标签:

package com.xsz.demo;
/**   
 * @author cwqi  
 * @date 2015-1-6  
 */

//排序之快速排序,基本思路為分治+挖坑,方法有兩種:一是雙邊掃面;二是單邊掃描。
public class QuickSort {
	public static void main (String[] args){
		int a[] ={2,3,30,1,4,56,2,7,3,8};
		//int a[] ={4,5,6,2,7,3,8};
		//int a[] ={1,5,4,3,8};
		//int a[] ={1,1};
		//int a[] ={1};
		//int a[] ={};
		//int a[] =null;
		int start=0;
		int end= a==null? -1:a.length -1;
		//singleScan(a,start,end);
		doubleScan(a,start,end);
		print(a,end);
	}

	static void doubleScan(int[] a, int start, int end) {
		 if(start < end){  
		        int i = start, j = end, key = a[start];  
		        while(i < j){  
		        	//從後面往前找比key值小的元素
		            while( i < j && a[j] >= key){  
		                j--;  
		            }  
		            if(i < j){  
		                a[i++] = a[j];  
		            }  
		            
		            //從前面往後找比key值大的元素
		            while(i < j && a[i] <= key){  
		                i++;  
		            }  
		            if(i < j){  
		                a[j--] = a[i];  
		            }  
		        }  
		        
		        a[i] = key;  //i為分區中心
		        doubleScan(a, start, i-1);  
		        doubleScan(a, i+1, end);  
		    }   
	}

	static void singleScan(int[] a, int s, int e) {
		int j = s+1;//遍歷下標
		int p = s;//分區位置
		if (s < e) {
			int key =a[s];//key值
			while (j<=e){
				if(a[j] <= key){
					p++ ;
					//System.out.println("key->"+key);
					int temp =a[p];
					a[p] = a[j];
					a[j]=temp;
					//System.out.println("交換----->"+a[j]+" "+a[p]);
					j++ ;
				}else {
					j++ ;
				}
			}
			
			//將key值放在分區位置
			int temp =a[s];
			a[s] = a[p];
			a[p]=temp;
			
			singleScan(a, s, p-1);
			singleScan(a, p+1, e);
		}
	}
	
	static void print(int[]array ,int l){
		for (int i = 0; i <= l; i++) {
			System.out.print(array[i]+" ");
		}
	}
}


排序之快速排序

标签:

原文地址:http://my.oschina.net/u/1861837/blog/364484

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!