you_never_alone的博客

一个萌新的萌作

java中的快速排序

我们先来举列子了解一下快速排序:


如图,我们以队伍第一个元素为基准,然后我们从后面找比基准大的值后,将他的值

放到基准的位置(注意 原位置还是他的值)

一次后:


第二次:


第三次:


第四次:


最后一次:


当两边的指标重合时,将基准放的那个位置,然后一次快速排序结束,

结束后的结果是,基准左侧,全是比他小的,基准右侧全是比他大的。


而递归就是一次快速排序后,两边递归子序列快排,函数实现:

public static int partio1(int []array,int low,int high ){
		int tmp = array[low];
		while(low<high){
			
			while(low<high&& array[high]>=tmp){
				--high;
			}
			if(low >=high){
				break;
			}else{
				array[low] = array[high];
			}
			while(low<high&&array[low]<=tmp){
				++low;
			}
			if(low>=high){
				break;
			}else{
				array[high] =array[low];
			}
		}
		array[low] = tmp;
		return low;
	}
	public static void Quick(int array[],int start,int end){
		int par = partio1(array,start,end);
		if(par > start+1){
			Quick(array,0,par);
		}
		if(par <end-1){
			Quick(array,par+1,array.length-1);
		}
	}
	public static void Quicksort(int array[]){
		Quick(array,0,array.length-1);
	}


非递归:


这是一次快排后的结果,我们将,基准两侧控制范围的下标入栈。


0到4是基准左侧的下标范围,6到8是基准右侧的下标范围,然后让8和6出栈,对这

个范围的子问题快排,如若大于一个元素,继续入栈,知道有序,类似递归,再让右

边有序,最终使得序列有序。

代码:

public static int partion(int[] array,int low,int high){
		int point = array[low];
		while(low < high){
			while(low < high && array[high] >= point){
				high--;
			}
			if(low >= high){
				break;
			}else{
				array[low] = array[high];
			}
			
			while(low < high && array[low] <= point){
				low++;
			}
			if(low >= high){
				break;
			}else{
				array[high] = array[low];
			}
		}
		array[low] = point;
		return low;
	}
	public static void Quicks(int[] array){
		int[] stack = new int[array.length];
		int top = 0;
		int low = 0;
		int high = array.length-1;
		int par = partion(array,low,high);
		//入栈
		if(par > low+1){
			stack[top++] = low;
			stack[top++] = par-1;
		}
		
		if(par < high-1){
			stack[top++] = par+1;
			stack[top++] = high;
		}
		
		//出栈
		while(top > 0){
			high = stack[--top];
			low = stack[--top];
			
			par = partion(array,low,high);
			if(par > low+1){
				stack[top++] = low;
				stack[top++] = par-1;
			}
			if(par < high-1){
				stack[top++] = par+1;
				stack[top++] = high;
			}
		}
	}

阅读更多
文章标签: 萌新入门
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

java中的快速排序

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭