快速排序,顾名思义,是一种速度快,效率高的排序算法。
快排原理:
在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。
整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。
一趟排序的方法:
1,定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数下标;
2,从数组的最后一个数Aj从右往左找,找到第一小于key的数,记为Aj;
3,从数组的第一个数Ai 从左往右找,找到第一个大于key的数,记为Ai;
4,交换Ai 和Aj
5,重复这个过程,直到 i=j
6,调整key的位置,把A[i] 和key交换
package sort;
import java.util.Arrays;
public class QuickSort{
public static void main(String[]args) {
int a[]= {25,24,12,76,101,96,28};
System.out.println("原数组为:"+Arrays.toString(a));
quicksort(a);
System.out.println("排序后为:"+Arrays.toString(a));
}
//确保不是空数组
public static void quicksort(int a[]) {
if(a.length>0) {
quicksort(a, 0, a.length-1);
}
}
private static void quicksort(int a[],int low,int high) {
//递归出口
if(low>high) {
return;
}
int i=low;
int j=high;
int key=a[low];
while(i<j) {
//从右到左找出比Key小的数
while(i<j&&a[j]>key) {
j--;
}
//从左到右找出比key大的数
while(i<j&&a[i]<=key) {
i++;
}
//交换a[i]和a[j]
if(i<j) {
int t=a[i];
a[i]=a[j];
a[j]=t;
}
//调整Key的位置
int t=a[low];
a[low]=a[i];
a[i]=t;
quicksort(a, i+1, high);//对右边的序列进行排序
quicksort(a, low, i-1);//对左边的序列进行排序
}
}
}
运行结果:
(原文:https://blog.csdn.net/Yexiaofen/article/details/78018204?utm_source=copy)