●快速排序
快速排序法介绍:
快速排序(Quicksort) 是对冒泡排序的一种改进。基本思想是:通过一趟排序
将要排序的数据分割成独立的两部分,其中一部分的所有 数据都比另外一部分
的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个
排序过程可以递归进行,以此达到整个数据变成有序序列
快速排序代码
import java.util.Arrays;
public class QuickSort{
//快速排序
public static void main(String[] args) {
int[] arr = new int[-1,84,-567,0,5,96];
quuickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quuickSort(int[] arr,int left,int right){
int l = left; //左下标
int r = right; //右下标
int pivot = arr[(left+right)/2];
//pivot 中轴值
int temp=0;
while(r>l){
while(arr[l]<pivot){
l+=1;
}
while(arr[r]>pivot){
r-=1;
}
if (l>=r){
break;
}
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//如果交换完,发现这个arr[l] == pivot值相等 ++
if (arr[l] == pivot){
l+=1;
}
//如果交换完,发现这个arr[l] == pivot值相等 --
if (arr[r] == pivot){
r-=1;
}
}
//如果 l==r, 必须l++,r--,否则出现栈溢出
if (l==r){
l+=1;
r-=1;
}
//左递归
if (left<r){
quuickSort(arr,left,r);
}
//右递归
if (l<right){
quuickSort(arr,l,right);
}
}
}
查看80000个随机数排序时间 代码
package day10;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class QuickSort{
//快速排序
public static void main(String[] args) {
int[] arr = new int[80000];
for (int i=0;i<80000;i++){
arr[i] = (int)(Math.random()*80000); // 生成一个 0-80000的数
}
System.out.println("排序前");
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str = simpleDateFormat.format(date);
System.out.println("排序前的时间是="+date1Str);
quuickSort(arr,0,arr.length-1);
Date date2 = new Date();
String date2Str = simpleDateFormat.format(date2);
System.out.println("排序后的时间是="+date2Str);
//System.out.println(Arrays.toString(arr));
}
public static void quuickSort(int[] arr,int left,int right){
int l = left; //左下标
int r = right; //右下标
int pivot = arr[(left+right)/2];
//pivot 中轴值
int temp=0;
while(r>l){
while(arr[l]<pivot){
l+=1;
}
while(arr[r]>pivot){
r-=1;
}
if (l>=r){
break;
}
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//如果交换完,发现这个arr[l] == pivot值相等 ++
if (arr[l] == pivot){
l+=1;
}
//如果交换完,发现这个arr[l] == pivot值相等 --
if (arr[r] == pivot){
r-=1;
}
}
//如果 l==r, 必须l++,r--,否则出现栈溢出
if (l==r){
l+=1;
r-=1;
}
//左递归
if (left<r){
quuickSort(arr,left,r);
}
//右递归
if (l<right){
quuickSort(arr,l,right);
}
}
}