1. 程式人生 > 其它 >快速排序(雙邊迴圈)

快速排序(雙邊迴圈)

package com.cc;

import java.util.Arrays;

/**
 * @Author: cc
 * @Create: 2021/12/21
 * 快速排序(雙邊迴圈)
 * 1、選擇最左元素作為基準 點元素
 * 2、j 指標負責從右向左找比基準點小的元素,
 * 3、i 指標負責從左向右找比基準點大的元素,一旦找到二者交換,直至i, j相交
 * 4、最後基準點與i (此時i與j相等)交換, i即為分割槽位置
 */
public class Quick2 {
    public static void main(String[] args) {
        int
[] a = {4,3,6,1,7,9,8,2}; quick(a, 0, a.length-1); } private static void quick(int []a,int l,int h){ if (l >= h){ return; } int p = partition(a,l,h); quick(a, l , p-1); quick(a, p + 1, h); } private static int partition(int
[]a,int l, int h){ int i = l; int j = h; int pv = a[l]; //基準點為左邊第一個 while (i < j){ //j從右邊找小的,找到後等i找到比基準點大的,然後i和j交換 while (i < j && pv < a[j]){ j--; } //i從左邊找大的 while(i < j && pv >= a[i]){ i
++; } swap(a, i ,j); } swap(a,l,i); System.out.println(Arrays.toString(a)); return j; } private static void swap(int [] a,int i ,int j){ int t = a[i]; a[i] = a[j]; a[j] = t; } }

輸出結果如下:

[1, 3, 2, 4, 7, 9, 8, 6]
[1, 3, 2, 4, 7, 9, 8, 6]
[1, 2, 3, 4, 7, 9, 8, 6]
[1, 2, 3, 4, 6, 7, 8, 9]
[1, 2, 3, 4, 6, 7, 8, 9]