快排

来源:互联网 发布:拼豆转图软件安卓 编辑:程序博客网 时间:2024/04/30 04:07

快排就是先找一个数为基准,把所有比这个数大的放在基准的右边,比这个数小的放在左边,这样基准的位置定下了;然后再对基准两边的数进行相同的操作

hdu 1040 As Easy As A+B

import java.io.BufferedInputStream;import java.util.Scanner;import static java.lang.System.out;public class Main {private Scanner sc = new Scanner(new BufferedInputStream(System.in));private int[] a;public void init() {int nCase = sc.nextInt();while (nCase-- > 0) {int n = sc.nextInt();a = new int[n];for (int i = 0; i < n; i++)a[i] = sc.nextInt();quickSort(0, a.length - 1);for (int i = 0; i < n-1; i++)out.printf("%d ", a[i]);out.println(a[n-1]);}}private void quickSort(int left, int right) {if (left < right) {int j = partition(left, right);quickSort(left, j - 1);quickSort(j + 1, right);}}private int partition(int first, int end) {int p = a[first], i = first, j = end;//以第一个数为基准 pwhile (i < j) {// 从右向左找while (i < j && a[j] > p) j--;if (i < j) {a[i] = a[j];i++;}// 从左向右找while (i < j && a[i] < p) i++;if (i < j) {a[j] = a[i];j--;}//以上两个过程实质就是交换比p大和比p小的两个元素位置 }a[i] = p;//最终i、j的位置的就是基准的位置return i;//返回基准的位置}public static void main(String[] args) {new Main().init();}}


原创粉丝点击