scuyxi 2009-07-25
package day2;
/*快速排序算法:将一个大数组的排序,分解成2个数组的排序。而每个小数组又可分解成更小的2个数组,这样数组的排序的方式可以一直递归下去
* 直到数组的大小为2.在第一次划分的时候,选择第一个基准元,然后将它分成左右两个无序的数组,并且,使得左边的所有元素都小于
* 等于基准元素,而右边的元素都大于等于基准元素,然后对左边和右边的数组做同样的递归操作。通常,选择最左边的俄元素作为基准元素
* ,或数组中间的元素作为基准元素。
*/
public class Array4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]={4,5,8,7,6,9,1,2,0,11,12,15};
sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+"\t");
}
}
//排序方法
public static void sort(int[] number){
quickSort(number,0,number.length-1);
}
//快速排序方法
public static void quickSort(int[] number,int left,int right){
if(left<right){
int s=number[left];
int i=left;
int j=right+1;
while(true){
//向右找大于s的数的索引
while(i+1<number.length&&number[++i]<s)
;
//向左找小于s的数的索引
while(j-1>-1&&number[--j]>s)
;
//如果i>=j,就退出循环
if(i>=j){
break;
}
//否则交换索引i和j的元素
swap(number,i,j);
}
number[left]=number[j];
number[j]=s;
//左边进行递归
quickSort(number,left,j-1);
//右边进行递归
quickSort(number,j+1,right);
}
}
//交换数组number中的索引为i,j的元素
private static void swap(int[] number,int i,int j){
int t;
t=number[i];
number[i]=number[j];
number[j]=t;
}
}