题解 | #图片整理#

图片整理

http://www.nowcoder.com/practice/2de4127fda5e46858aa85d254af43941

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			char[] chars = sc.next().toCharArray(); 
			chars = quickSort(chars, 0, chars.length-1);
			
			System.out.println(chars);
		}
		
		sc.close();
	}

	
	public static char[] quickSort(char[] chars, int begin, int end){
		
		//初始化
		int ref = begin;//参考值初始定为第1个
		int ptr = begin+1;//左边指针ptr,向右移动
		int ptr1 = end;//右边指针ptr1,向左移动
		
		//while循环开始,循环结束后分界线确定,进入递归。
		while(ptr <= ptr1){//左右指针可相遇重合,即ptr==ptr1
			
			//移动右指针,直到遇到符合条件的才停下来
			while(chars[ptr1] > chars[ref] && ptr < ptr1){//右指针此时一定是在参考值左边的。当遇到比参考值小的,或者遇到左指针(不重合),就停止移动
				ptr1--;
			}
			
			
			//参考值与右指针交换
			if(ptr < ptr1){//交换前先判断左右指针是否重合,指针重合的情况单独拿出来讨论
				
				if(chars[ref] > chars[ptr1]){//两边的值相等时,省去交换操作,只变更参考指针。
					chars = swap(chars, ref, ptr1);
				}
				
				//更新参考指针
				ref = ptr1;
				
			}
			
			//移动左指针,直到遇到符合条件的才停下来。
			while(chars[ptr] < chars[ref] && ptr < ptr1){//左指针此时一定是在参考值左边的。当遇到比参考值大的,或者遇到右指针(不重合),就停止移动。
				ptr++;
			}
			
			//参考值与左指针交换
			if(ptr < ptr1){//指针不重合。重合的情况后面单独处理。
				if(chars[ptr] > chars[ref]){//两边的值相等时,省去交换操作,只变更参考指针。
					chars = swap(chars, ptr, ref);
				}
				
				//更新参考指针
				ref = ptr;
				
				//等左右各交换一次后,右指针左移一下(试过如果提前移动,会出错,懒得深究了)
			    ptr1--;
			    
			}
			
			//此时判断一下指针是否重合,重合的话需要处理一下。而且此时重合点一定是在参考值右边的。
			if(ptr == ptr1){
				if(chars[ptr1] < chars[ref]){//重合点的值比参考值小,就交换一下
					chars = swap(chars, ref, ptr1);
				}else{
					//重合点比参考值大或相等(相等的留给递归处理),则不做任何动作
					break;
				}
			}
		}
		
		
		//开始递归左边和右边
		if(begin < ref-1){//递归把参考值左边部分排好序。直到数组细分到只剩1个的长度。
			
			
			chars = quickSort(chars, begin, ref-1);//递归调用
		}
		
		if(ref+1 < end){//递归把参考值左边部分排好序。直到数组细分到只剩1个的长度。
			
			chars = quickSort(chars, ref+1, end);//递归调用
		}
		return chars;
		
	}
	
	public static char[] swap(char[] chars, int i, int j){
		char temp = chars[i];
		chars[i] = chars[j];
		chars[j] = temp;
		return chars;
	}
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务