在网上找来找去,基本都是用c语言实现的快速排序,或者用java写的但是不够简洁。于是自己就用java写了一个。我们知道快速排序的时间复杂度平均为O(nlog2n),喜欢基本无序的情况,代码如下:
public class quickSort {
/**
* @param 快速排序
*/
public static void main(String[] args) {
int data[] = {23,4,3,12,12,54,9,80,31};
quickSort qu = new quickSort();
qu.QuickSort(data);
qu.display(data);
}
private void QuickSort(int []data){
quickSort.sort(data,0,data.length-1);
}
private static void sort(int data[],int left,int right){ //进行快速排序
int i ,j ;
if(left<right){
i = left; j=right+1;
do{
do i++;while(data[i]<data[left]);
do j--;while(data[j]>data[left]);
if(i<j) {
data[i] = data[i]^data[j];
data[j] = data[i]^data[j];
data[i] = data[i]^data[j];
}
}while(i<j);
//当left==j时,如果使用这种方式进行交换的时候,会造成data[left]=data[j]=0
if(left!=j){
data[left] = data[left]^data[j];
data[j] = data[left]^data[j];
data[left] = data[left]^data[j];
}
quickSort.sort(data,left,j-1); //其实a[j]这个数的位置已经确定了
quickSort.sort(data,j+1,right);
}
}
private void display(int data[]){
for(int a:data)
System.out.print(a+"--");
}
}