oc:2个有序数组合并成一个有序数组,代码贴出来大家看看问题在哪

杭城小刘 发布于 2016/09/16 09:11
阅读 701
收藏 0

        NSArray *praises = @[ @"4",@"7",@"9"];

        NSArray *replys = @[ @"3",@"5",@"7"];

        NSMutableArray *array = [NSMutableArray arrayWithCapacity:praises.count+replys.count];

        int i=0;

        int j=0;

        while (i<praises.count &&j<replys.count) {

            if (praises[i]<replys[j]) {

                array[i+j]= praises[i];

                i++;

            }else{

                array[i+j] = replys[j];

                j++;

            }

        }

        

        

        while (i<praises.count) {

            array[i+j] = praises[i++];

        }

        

        while (j<replys.count) {

            array[i+j] = replys[j++];

        }

        NSLog(@"排序后%@",array);

加载中
0
ws199358
ws199358

问题很明显就是在你第一个while循环上面,你本来想遍历两个数组并同时对比,但是你写法有bug,如果其中有一个数组的先遍历完后,因为你的循环条件是i<praises.count &&j<replys.count,所以遍历对比停止,但假如你的另外一个数组剩两个及两个以上元素没有遍历就结束了,你接下来的另外两个while循环并没有接着进行遍历对比,只是把剩下的加进去了而已,所以得出的答案肯定不是正确的,比如{6,5,4}和{1,2,3},你如果试试这两个数组,你运行结果肯定是{1,2,3,6,5,4}

解决方案:最后那两个while循环修改一下,写一个排序法(比如冒泡排序)将没有遍历完的元素按从小到大依次加入到array中即可。代码就不帮你写了哈,只给你提供个思路。

返回顶部
顶部