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 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://blog.csdn.net/havedream_one/article/details/46315305
兄弟,看样子你对快排理解的不太对。
public static int getPivotIndex(int[] array, int begin, int end) {
int index = 0;
int pivot = array[begin];
while (begin < end) {
while ((array[end] > pivot) && (begin < end)) {
end--;
}
array[begin] = array[end];
while ((array[begin] < pivot) && (begin < end)) {
begin++;
}
array[end] = array[begin];
if (begin >= end) {
array[end] = pivot;
index = end;
}
}
return index;
}
一次快排后,应该返回轴的index,这个没有问题吧
核心这块,可以用填坑思想来理解,最后一个元素与轴比较,如果大,index--,否则把当前的值交换到begin的位置,然后开始比较begin与轴的大小,如果小index++,
否则把当前值与end交换,最后begin与end相交的时候,把轴的值填到相交的位置出,并返回index就可以了。
兄弟,看样子你对快排理解的不太对。
public static int getPivotIndex(int[] array, int begin, int end) {
int index = 0;
int pivot = array[begin];
while (begin < end) {
while ((array[end] > pivot) && (begin < end)) {
end--;
}
array[begin] = array[end];
while ((array[begin] < pivot) && (begin < end)) {
begin++;
}
array[end] = array[begin];
if (begin >= end) {
array[end] = pivot;
index = end;
}
}
return index;
}
一次快排后,应该返回轴的index,这个没有问题吧
核心这块,可以用填坑思想来理解,最后一个元素与轴比较,如果大,index--,否则把当前的值交换到begin的位置,然后开始比较begin与轴的大小,如果小index++,
否则把当前值与end交换,最后begin与end相交的时候,把轴的值填到相交的位置出,并返回index就可以了。