快速排序
快速排序的基本思路:
1、在数组a中,有一段待排序的数据,下标从l到r。
2、取a[l]放在变量value中,通过由右、左两边对value的取值的比较,为value选择应该排定的位置。这时要将比value大的数放右边,比它小的数放左边。当value到达最终位置后(如下标m),由它划分了左右两个集合[l..m-1]、[m+1..r]。然后转第1步,再用相同的思路分别去处理左集合和右集合。
1 import java.math.BigInteger; 2 import java.util.Arrays; 3 import java.util.Scanner; 4 5 6 public class Main { 7 public static void main(String[] args) { 8 int[] a = {5,6,3,1,5,4,5,7,8,3}; 9 f(a,0,a.length-1); 10 System.out.println(Arrays.toString(a)); 11 } 12 public static void f(int[] a,int l,int r){ 13 if(l>=r) return; 14 int temp = a[l]; 15 int l1 = l; 16 int r1 = r; 17 boolean flag = true; 18 while(l1<r1){ 19 if(flag){ 20 if(a[r1]<temp){ 21 a[l1] = a[r1]; 22 l1++; 23 flag = false; 24 }else{ 25 r1--; 26 } 27 }else{ 28 if(a[l1]>temp){ 29 a[r1] = a[l1]; 30 r1--; 31 flag = true; 32 }else{ 33 l1++; 34 } 35 } 36 37 } 38 a[l1] = temp; 39 f(a,l,l1-1); 40 f(a,l1+1,r); 41 } 42 }