/* 因为数组为[0, n-1],是连续的,只是乱序的。 从始至终只能交换0和其中某个数。 最终排好的数组,下标和该位置上的数相同,即array[i] == i。 -------------------------------- 所以,代码思路: 1、要使数组array[i]为i,又因只能与0交换,所以要先让0在这个位置上,即swapWithZero(array, len, array[i]); 2、然后将i与0交换:swapWithZero(array, len, i); 即可使数组array[i]==i */ public void sort(int[] array, int len) { // 完成这个函数 for(int i=0;i<len;i++){ //可加个判断:array[i] == i则跳下一个数, 可减少执行次数 swapWithZero(array, len, array[i]);//将0换到i的位置 swapWithZero(array, len, i);//将i与0交换,i放到array[i]的位置 } }
public void sort(int[] array, int len) { int min, index; for(int n = 1; n < len; n ++){ swapWithZero(array, len, array[n]); min = array[0]; index = 0; for(int j = n+1; j < len; j ++){ if(array[j] < min){ min = array[j]; index = j; } } swapWithZero(array, len, array[index]); } }
/* * 测试用例:[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 } } }
public void sort(int[] array, int len) { // 完成这个函数 if(len <= 1){ return; } for(int i = len - 1; i > 0; --i){ //从最后一位开始,将最大的数放到最大位置上,然后依次找次大的放 if(array[i] == i) continue; //已经相等,则不交换,避免不必要的重复交换 swapWithZero(array,len, array[i]); //现将0和最后一位交换,以便将第n最大值换到第n大位置上 int curMax = array[i]; for(int j = i; j >= 0; --j){ //找出第n大的数 if(array[j] > curMax){ curMax = array[j]; } } swapWithZero(array,len, curMax); } }
/** * 交换数组里n和0的位置 * array: 存储[0-n)的数组 * len: 数组长度 * n: 数组里要和0交换的数 */ extern void swap_with_zero(int* array, int len, int n); class Solution { public: /** * 调用方法swap_with_zero来对array进行排序 */ void sort(int* array, int len) { for(int i = len - 1; i > 0; i --) { if(array[i] == i) //判断是否在正确位置 continue; swap_with_zero(array, len, array[i]); //交换0与i位置的数字 swap_with_zero(array, len, i); //交换0与i } } };
/** * 交换数组里n和0的位置 * array: 存储[0-n)的数组 * len: 数组长度 * n: 数组里要和0交换的数 */ extern void swap_with_zero(int* array, int len, int n); class Solution { public: /** * 调用方法swap_with_zero来对array进行排序 */ void sort(int* array, int len) { // 使得0位置为0 swap_with_zero(array, len, 0); for (int i = 1; i < len; ++i) { if (array[i] == i) { continue; } // 将正确的值先保存到0位置 swap_with_zero(array, len, i); // 将乱序位置的值和0随机交换,以免被覆盖 swap_with_zero(array, len, array[i]); // 将保存在0位置的正确值交换到合适的位置 swap_with_zero(array, len, array[0]); } } };
/** * 交换数组里n和0的位置 * array: 存储[0-n)的数组 * len: 数组长度 * n: 数组里要和0交换的数 */ extern void swap_with_zero(int* array, int len, int n); class Solution { public: /** * 调用方法swap_with_zero来对array进行排序 */ void sort(int* array, int len) { int *a = array; int i = 1; while(i < len){ if(a[i] == i){ ++i; continue; } if(a[i] != 0) swap_with_zero(a, len, a[i]); swap_with_zero(a, len, i); ++i; } } };
/** * 交换数组里n和0的位置 * array: 存储[0-n)的数组 * len: 数组长度 * n: 数组里要和0交换的数 */ extern void swap_with_zero(int* array, int len, int n); class Solution { public: /** * 调用方法swap_with_zero来对array进行排序 */ void sort(int* array, int len) { int tmp = 0; for (int i = len - 1; i >= 0; i--) { if (array[i] == i) continue; if (0 != array[i]) swap_with_zero(array, i + 1, array[i]); swap_with_zero(array, i + 1, i); } } };