-2

我的作业中有问题说:

给定一个元素全为 0(零)或 1(一)的未排序数组,编写代码对数组进行排序,使所有的 0 首先出现,然后是所有的 1。您可以假设“num_elements”总是准确地指示数组中的元素数量。请使用以下函数头:

void sort_elements(int array[], int num_elements);

我真的不知道他的意思是什么,他想要两个数组还是一个。请给我解释一下。

我做到了:DI 不敢相信自己,我使用了 2 个 for 循环,其中有 2 个 if .. 谢谢大家的帮助 <3 <3

public class Q4 {

    public static void main (String []args){

         int Sky[]={0,0,1,1,0,1};
         sort_elements(Sky,Sky.length);          
       }

      public static void  sort_elements(int array[],int num_elements){
         for ( int i=0; i < num_elements ; i++){
            if ( array[i]==0){
               System.out.println(array[i]);
            }
        }

         for ( int i=0; i<num_elements ; i++){
            if ( array[i]==1){
               System.out.println(array[i]);
            }
        }



    }
}
4

3 回答 3

3

1) 保持左右两个指针。
2) 开始向右遍历左指针,直到遇到 1。
3) 将右指针向左开始,直到遇到 0。
4) 设置 array[left] = 0, array[right] = 1
5) 继续这样做,直到左右指针收敛。
6) 由于我们只需要遍历数组一次,因此排序发生在 O(n) 时间内。

于 2012-12-11T22:16:15.620 回答
0

从问题陈述中可以清楚地看出,您的函数应该array就地排序。

至于实际实现这一点,请阅读count sort

于 2012-12-11T22:15:40.807 回答
0

如果我正在实施这个,我只需要一行:

Arrays.sort(array);
于 2012-12-11T22:18:09.523 回答