|
下标
|
0
|
1
|
2
|
3
|
4
|
5
|
|
数据
|
6
|
2
|
7
|
3
|
8
|
9
|
|
下标
|
0
|
1
|
2
|
3 |
4
|
5
|
|
数据
|
3
|
2
|
7
|
6
|
8
|
9
|
|
下标
|
0
|
1
|
2
|
3
|
4
|
5
|
|
数据
|
3
|
2
|
6
|
7
|
8
|
9
|
|
下标
|
0
|
1
|
2
|
3
|
4
|
5
|
|
数据
|
3
|
2
|
6
|
7
|
8
|
9
|
package data;
import java.util.Arrays;
import java.util.Random;
/**
* 快速排序算法
* @author JYC506
*
*/
public class QuickSort {
private static void sort(int[] arr,int left,int right) {
/*低位置起始点*/
int low = left;
/*高位置起始点*/
int hight = right;
/*要比较的数据为低位置起始点的值*/
int data = arr[low];
while (low < hight) {
while(low < hight&&arr[hight] >=data){
hight--;
}
/*把比它小的放左边,因为low最终为data*/
if (low<hight) {
arr[low]=arr[hight];
/*因为我跟你比较过了所以下次不比较了,加一*/
low++;
}
while(low < hight&&arr[low]<= data){
low++;
}
/*把比它大的放右边*/
if (low<hight) {
arr[hight] = arr[low];
/*因为我跟你比较过了所以下次不比较了,减一*/
hight--;
}
}
/*注意下标为low最终为data*/
arr[low]=data;
/*因为在data右边都比data大,所以现有data的右边在下一次排序时候不需要再排了*/
if(low>left){
sort(arr,left,hight-1);
}
/*因为在data左边都比data小,所以现有data的左边边在下一次排序时候不需要再排了*/
if(hight<right){
sort(arr,low+1,right);
}
}
public static void sort(int[] arr){
sort(arr,0,arr.length-1);
}
public static void main(String[] args) {
int[] arr=new int[]{6,2,7,3,8,9};
System.out.println("快速排序前:"+Arrays.toString(arr));
QuickSort.sort(arr);
System.out.println("快速排序后:"+Arrays.toString(arr));
int num=10000000;
Random ran=new Random();
int[] arr1=new int[num];
int[] arr2=new int[num];
for(int i=0;i<num;i++){
int data=ran.nextInt(num);
arr1[i]=data;
arr2[i]=data;
}
long start=System.currentTimeMillis();
QuickSort.sort(arr1);
long end=System.currentTimeMillis();
Arrays.sort(arr2);
long end2=System.currentTimeMillis();
System.out.println("我自己写快速排序算法1000万随机数排序耗时:"+(end-start)+"毫秒");
System.out.println("jdk自带的快速排序算法1000万随机数排序耗时:"+(end2-end)+"毫秒");
}
}
原文地址:http://blog.csdn.net/h348592532/article/details/45484511