标签:
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
以上的就是思想,在看了这个视频:http://www.iqiyi.com/v_19rrhzyeqs.html,我学着写了一段脚本,脚本如下
public class QuickSort {
public static void main(String[] args){
int[] a={12,22,11,3,13,45,6,33,22,5,6,2,1,12};
show(a);
sort(a, 0, a.length - 1);
show(a);
}
public static void show(int a[]){
for(int i=0;i<a.length;i++)
System.out.print(a[i] + " ");
System.out.println();
}
public static void sort(int[] a, int begin, int end){
if(end-begin<=1)
return;
int key=a[begin];//基准
int p1=begin;
int p2=end;
boolean bool=true;//默认为true的时候从右向左比较
L1: while (p1<p2){
if(bool){
for(int i=p2;i>p1;i--){
if(a[i]<=key){
a[p1]=a[i];
p1++;
p2=i;
bool=false;
continue L1;
}
}
p2=p1;
}else {
for(int i=p1;i<p2;i++){
if(a[i]>=key){
a[p2]=a[i];
p2--;
p1=i;
bool=true;
continue L1;
}
}
p1=p2;
}
}
a[p1]=key;
sort(a, begin, p1 - 1);
sort(a, p1 + 1, end);
}
}
但是执行的结果为
12 22 11 3 13 45 6 33 22 5 6 2 1 12 1 2 3 5 6 6 11 12 12 22 13 22 45 33
奇怪的是,思路是没有错误的,但是为什么结果却是不对,还在研究中
标签:
原文地址:http://www.cnblogs.com/xxyBlogs/p/4948340.html