JAva筆記試験問題-0交換ソート


package com.zjp.offer.study;

import java.util.Arrays;

/**
 * 0    :
 *    n        0 n-1.       0       ,      
 */
public class SortWithZero {
    public static void main(String[] args) {
        int[] arr = {8, 5, 3, 0, 6, 1, 2, 4, 7};
        sort(arr, arr.length);
        System.out.println(Arrays.toString(arr));
    }

    /**
     *   :    。  0   i         , swapWithZero(arr, len, arr[i]).  0  i  ;
     *   0   i    .    i  i  
     * @param arr
     * @param len
     */
    private static void sort(int[] arr, int len) {
        for (int i = len - 1; i > 0; i--) {
            if (arr[i] == i) {
                continue;
            }
            // i      0  ,  arr[i]=0
            swapWithZero(arr, len, arr[i]);
            //   i 0  
            swapWithZero(arr, len, i);
        }
    }

    private static void swapWithZero(int[] arr, int len, int n) {
        int zIndex = -1;
        int nIndex = -1;
        //      0   n     
        for (int i = 0; i < len; i++) {
            if (arr[i] == 0) {
                zIndex = i;
            }
            if (arr[i] == n) {
                nIndex = i;
            }
        }
        //    
        int tmp = arr[zIndex];
        arr[zIndex] = arr[nIndex];
        arr[nIndex] = tmp;
    }
}