我最近正在学java,练习时写了一个快速排序算法,现在发上来,希望大家给评测一下……轻拍呵
代码如下:
import java.util.Arrays;
//快速排序算法
public class QuickSort {
public static void main(String[] args){
//待排序的数组
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(100 * Math.random());
}
System.out.println(Arrays.toString(arr));
sort(arr,0,arr.length-1);
}
public static void sort(int[] a,int first,int end){
/*
* 1、从j开始从后往前,找到第一个小于key的数组元素arr[j],和arr[i]交换位置
* 2、从i开始从前往后,找到第一个大于key的数组元素arr[i],和arr[j]交换位置
* 3、i++,j--
* 4、重复1、2、3直到i = j;
*/
int tmp;
int k = first;//保存key值每轮比较之后的所在的位置
int i = first;
int j = end;
int key = a[i];
while(i != j){
while(j > i){
if(key > a[j]){
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
break;
}
j--;
}
while(i < j){
if(key < a[i]){
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
break;
}
i++;
k++; /*因为i是从前往后找的,只要没有找到比Key大的i就加1,那么就是找到了一个比key小的,所以比key小的数组元 素的数目就加1,key最终所在的位置是它前面的数都比它小,后面的数都比他大*/
}
}
System.out.println(Arrays.toString(a));
if(first < k-1){
sort(a,first,k-1);
}
if(end > k + 1){
sort(a,k + 1,end);
}
}
}