- 快速排序80000000数据排序
- i5 8th大约十秒
package Sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
/**
* 实现快速排序的算法
* @author bxh
*
*/
public class QuickSort {
public static void main(String[] args) {
// int[] arr= {7,2,6,5,3,9,1,4,0,8};
// quicksort(arr, 0, arr.length-1);
// System.out.println("快速排序后的数组为"+Arrays.toString(arr));
int[] arr=new int[80000000];
for(int i=0;i<80000000;i++)
{
arr[i]=(int)(Math.random()*8000000);
}
Date date1=new Date();
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str=(String)simpleDateFormat.format(date1);
System.out.println("排序前的时间为"+date1Str);
quicksort(arr, 0, arr.length-1);
// quicksort(arr, 0, arr.length-1);
//
Date date2=new Date();
SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str2=(String)simpleDateFormat1.format(date2);
System.out.println("排序后的时间为"+date1Str2);
}
//找到每次快排后的index位置 方便后续的递归操作
public static int indexsearch(int[] arr,int leftindex,int rightindex) {
int base=arr[leftindex];
while(leftindex<rightindex)
{
while(leftindex<rightindex&&arr[rightindex]>=base)
{
rightindex--;
}
arr[leftindex]=arr[rightindex];
while(leftindex<rightindex&&arr[leftindex]<=base)
{
leftindex++;
}
arr[rightindex]=arr[leftindex];
}
arr[leftindex]=base;
return leftindex;
}
/**
*
* @param arr 待排序的数组
* @param leftindex 左索引
* @param rightindex 右索引
*/
public static void quicksort(int[] arr,int leftindex,int rightindex) {
if(leftindex<rightindex)
{
int index=indexsearch(arr, leftindex, rightindex);
quicksort(arr, leftindex, index-1);
quicksort(arr, index+1, rightindex);
}
}
}