标题:java排序算法之快速排序
一、分析
快速排序,就是每次取第一个数,经过排序后 ,使得左边的小于该数,右边的大于该数
对于此数组eg:32,15,6,48,19,21,47
- 第一次排序后
21,15,6,19,32,48,47
可以发现32的左边小于它,右边大于它。 - 此后,就可以将32的两边分开进行递归【重复上述的第一次排序步骤】。
参考代码如下:
public int[] quickSort(int[] a,int start,int end) {
if(start>=end) {
return a;
}
int i=start;
int j=end;
int temp=a[i];
while(i<j) {
while(i<j && temp<=a[j]) {
j--;
}
a[i]=a[j];
while(i<j && a[i]<=temp) {
i++;
}
a[j]=a[i];
}
a[i]=temp;
a=quickSort(a,start,i-1);
a=quickSort(a,i+1,end);
return a;
}
测试代码如下:
public int[] quickSort(int[] a,int start,int end) {
if(start>=end) {
return a;
}
int i=start;
int j=end;
int temp=a[i];
while(i<j) {
while(i<j && temp<=a[j]) {
j--;
}
a[i]=a[j];
while(i<j && a[i]<=temp) {
i++;
}
a[j]=a[i];
}
a[i]=temp;
// for(int in:a) {
// System.out.print(in+" ");
// }
// System.out.println();
a=quickSort(a,start,i-1);
a=quickSort(a,i+1,end);
return a;
}
@Test
public void test() {
int[] a=new int[] {32,15,6,48,19,21,2};
// int[] a=new int[] {32,15,6,48,19,21,47};
// int[] a=new int[] {43,12,35,18,26,57,7,21,43,46};
// int[] a=new int[] {32,15,6,48,19,21,27};
a = this.quickSort(a,0,a.length-1);
for(int in:a) {
System.out.print(in+" ");
}
}