首页 > 试题广场 >

0交换排序

[编程题]0交换排序
  • 热度指数:5850 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换,完成以下函数
推荐
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);
 }
验证通过

编辑于 2015-06-19 17:51:08 回复(6)
 /*
 * 
测试用例:[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
        }
    }
    
}

编辑于 2020-07-23 23:46:47 回复(1)

 public void sort(int[] array, int len) {
        int[] a = new int[len];
        for(int i= 0; i< len; i++){
            a[i] = i;
        }
        array = a;
    }
java 引用替换为什么是错的
发表于 2020-01-21 15:35:17 回复(0)
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方法来排
     * 
     * @param array
     *            存储有[0,n)的数组
     * @param len
     *            数组长度
     */
    public void sort(int[] array, int len) {
        // 完成这个函数
        for(int i = len - 1; i>= 0;i--){
            int a = array[i];
            swapWithZero(array, len, a);
            swapWithZero(array, len, i);
        }
    }
}
发表于 2019-12-05 01:06:26 回复(0)
  本地运行出来没问题,提交就报错,哪位大神能帮忙解答下????

发表于 2019-04-09 20:40:40 回复(0)
没看懂题目,随便测试竟然试对了。有些网上的测试题目及编译器让人醉了,仅供参考。
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方法来排
*
* @param array
*            存储有[0,n)的数组
* @param len
*            数组长度
*/
public void sort(int[] array, int len) {
// 完成这个函数
for(int i=0;i<len;i++){
swapWithZero(array, len, array[i]);
swapWithZero(array, len, i);
}
}
}
编辑于 2017-02-26 18:35:25 回复(1)