序言
最近没什么事,准备把简单的排序都过一遍,记录下来怕以后忘了记不住。
快排原理
1.选择一个基准值(一般都选择第一个)
2.设定起始点(start)和结束点(end),从数组两端分别扫描数组,先从结束点开始扫描,如果值比基准值小,交换起始点的值和结束点的值,然后从起始点开始扫描,如果值比基准值大,交换起始点的值和结束点的值,如此循环之后,数组左边就是小于基准值的,右边就是比基准值大的。
3.采用递归对基准值左右两边数据进行排序。
代码实现
import java.util.Arrays;
public class FastSort {
public static void main(String[] args) {
int[] array = {3,23,33,4,23,43242,123,2313,23};
FastSort(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
public static void FastSort(int[] array,int start,int end){
if(start<end){
int index = OneFastSort(array, start, end);
FastSort(array,start,index-1);
FastSort(array,index+1,end);
}
}
public static int OneFastSort(int[] array,int start,int end){
//设置标识 从结束点向前比较为0 ,反之为1
int flag = 0;
int key = array[start];
while (start!=end){
if(flag==0){
if(key>array[end]){
array[start] = array[end];
flag = 1;
start++;
}else{
end--;
}
}else{
if(key<array[start]){
array[end] = array[start];
flag = 0;
end--;
}else{
start++;
}
}
}
array[start] = key;
return start;
}
}