快速排序
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int [] array = {1,55,25,12,14,58,125,48,999,35};
QuickSort1(array,0,array.length-1);
System.out.println(Arrays.toString(array));
}
/**
* s
* 1 55 25 12 14 58 125 14 25 35
* i j
*
* 如果s在最左边,首先与j比较,相反则和i比较
*/
public static void QuickSort1(int [] a, int beginIndex, int endIndex){
int i = beginIndex, j = endIndex, soldier = beginIndex;
while (i < j){
for (; i < j; j--){
if (a[soldier] > a[j]){
int temp = a[j];
a[j] = a[soldier];
a[soldier] = temp;
soldier = j;
break;
}
}
for (; i < j; i++){
if (a[soldier] < a[i]){
int temp = a[i];
a[i] = a[soldier];
a[soldier] = temp;
soldier = i;
break;
}
}
}
if (soldier - beginIndex >1){
QuickSort1(a,beginIndex,soldier-1);
}
if (endIndex - soldier > 1){
QuickSort1(a,soldier + 1, endIndex);
}
}
}
此处主要借助了一个soldier,如果soldier在最左边,那么将首先与最右边的数进行比较,相反soldier在最右边,那么将首先与最左边的数进行比较;最终保证soldier左边的数比自己小,右边的数比自己大。最后再进行迭代,最终输出结果。(假设三个数,中间的数为soldier,此时的三个数为最小单位,每相邻三个数符合,就迭代完毕,输出结果)。