/* * 测试用例:[3,8,2,4,5,0,1,7,9,6] 对应输出应该为:[0,1,2,3,4,5,6,7,8,9] * */ public class Solution { /** * 交换数组里n和0的位置 * * @param array * 数组 * @param len * 数组长度 * @param n * 和0交换的数 */ // 不要修改以下函数内容 public void swapWithZero(int[] array, int len, int n) { Main.SwapWithZero(array, len, n);//备注:这个SwapWithZero()方法是牛客网已经实现好的,作用:交换数组里n和0的位置 } // 不要修改以上函数内容 /** * 通过调用swapWithZero方法来排 * * @param array * 存储有[0,n)的数组 * @param len * 数组长度 */ public void sort(int[] array, int len) { // 完成这个函数 for(int i = 0; i < len; i++){ if(array[i] == i){ continue; } swapWithZero(array, len, array[i]);//因只能与0交换,所以要先让0在array[i]这个位置上 swapWithZero(array, len, i);//然后将i与0交换,即可使数组array[i]==i } } }
for (int i = len-1; i>=0; i--){ if (array[i] == i){ //i--; continue; } int k = array[i]; while (array[k] != k&&array[k] != i) { k = array[k]; } swap_with_zero(array, len, i); swap_with_zero(array, len, k); }