/*
因为数组为[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);
}
}
};
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); }