Java快速排序 分别以数组0位作为基准 和最后一位作为基准的排序演示

package util;

public class Pub {

	public static void beforeSort(int[] arr){
System.out.println("before sort: ");
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
}
public static void afterSort(int[] arr){
System.out.println("after sort: ");
for(int i:arr){
System.out.print(i+" ");
}
} }

  以0位为基准 代码如下:

package swap;

import java.util.Arrays;

import util.Pub;

public class FastSort {

	/**
* @param args
*/
public static void main(String[] args) {
int[] a={1,38,65,97,76,13,27};
Pub.beforeSort(a);
quick(a);
Pub.afterSort(a);
} private static int getMiddle(int[] arr,int left,int right){
int base=arr[left]; //关键一点 当从左边第一个数作为基数的时候,先从右边开始判断
while(left<right){
while(left<right&&arr[right]>=base){
right--;
}
arr[left]=arr[right];
while(left<right&&arr[left]<=base){
left++;
}
arr[right]=arr[left];
}
arr[left]=base;
return left;
//System.out.println(left);
} private static void quickSort(int[] a, int low, int high) {
if(low<high){ //如果不加这个判断递归会无法退出导致堆栈溢出异常
int middle = getMiddle(a,low,high);
quickSort(a, 0, middle-1);
quickSort(a, middle+1, high);
}
}
private static void quick(int[] a) {
if(a.length>0){
quickSort(a,0,a.length-1);
}
} }

  运行结果:

before sort:
1 38 65 97 76 13 27
after sort:
1 13 27 38 65 76 97

  以末尾为基准,代码如下:

package swap;

import java.util.Arrays;

import util.Pub;

public class FastSortReverse {

	/**
* @param args
*/
public static void main(String[] args) {
int[] a={1,38,65,97,76,13,27};
Pub.beforeSort(a);
quick(a);
Pub.afterSort(a);
} private static int getMiddle(int[] arr,int left,int right){
// 关键一点 选数组哪边开始作为基数点进行比较,需要从另一头开始进行判断,否则会进行错误的替换。
int base=arr[right];
while(left<right){
while(left<right&&arr[left]<=base){
left++;
}
arr[right]=arr[left];
while(left<right&&arr[right]>=base){
right--;
}
arr[left]=arr[right];
}
//因为这种方法 总是会将最初的base基准数字覆盖掉,所以 需要找到合适的地方,放入基准数字。
arr[left]=base;
return left;
//System.out.println(left);
} private static void quickSort(int[] a, int low, int high) {
if(low<high){ //如果不加这个判断递归会无法退出导致堆栈溢出异常
int middle = getMiddle(a,low,high);
quickSort(a, 0, middle-1);
quickSort(a, middle+1, high);
}
}
private static void quick(int[] a) {
if(a.length>0){
quickSort(a,0,a.length-1);
}
} }

  运行结果:

before sort:
1 38 65 97 76 13 27
after sort:
1 13 27 38 65 76 97

  

上一篇:linux文件系统详解


下一篇:(转载)PureMVC 练习时的注意事项