首页 新闻 搜索 专区 学院

c语言中的数组排序问题一二

1
[已解决问题] 解决于 2012-04-14 23:08

现在有两个数组,s1和s2,

函数原型 void func(char *s1, char *s2)

要求在不改变s1的情况下,把s1中的元素按照升序排在s2数组中。

法一:先把s1复制到s2中再用选择法排序,

但我现在有另外一个思路,就是我直接在s1数组中检索,把其中的最小值放在s2【0】中,依次类推,可是我写不出它的算法,另外,所写出来的算法与法一相比,那个更好。特求高手,望不吝赐教,不胜感激。

飞天狐的主页 飞天狐 | 菜鸟二级 | 园豆:208
提问于:2012-04-11 23:08
< >
分享
最佳答案
1

你这种思路也属于选择法排序:C语言程序设计 选择排序简介

只是说在源数组上排序和复制到目标数组后排序哪个更优,我觉得没有明显的差别

奖励园豆:5
artwl | 专家六级 |园豆:16526 | 2012-04-12 07:42

那你可不可以帮帮忙想想如何在元素组中排序啊,我想了很久都没想得出啊!

先谢咯!

飞天狐 | 园豆:208 (菜鸟二级) | 2012-04-12 21:42

@飞天狐: 如果要不修改源数组进行排序,需要额外的空间,选选择出最小的,然后存在另个一个变量中,再选择次小的,直到结束

artwl | 园豆:16526 (专家六级) | 2012-04-12 21:54
其他回答(2)
0

学习了。。。

KivenRo | 园豆:1722 (小虾三级) | 2012-04-12 09:10
0

for(int i = 0; i < n; i++)

{

    for(int j = i - 1; j > 0; j--)

    {

        if(s1[i] > s2[j])

        {

            s2[j+1] = s1[i];

        }

        else

        {

            s2[j+1] = s2[j]

        }

    }

}

以上代码有个BUG,你自己调试下解决吧。

无之无 | 园豆:5085 (大侠五级) | 2012-04-12 10:15

不明,s2是没有初始化的。不太看得懂你的程序。

支持(0) 反对(0) 飞天狐 | 园豆:208 (菜鸟二级) | 2012-04-12 21:40

@飞天狐: S2是一个已经定义好大小的数组了吧?循环的过程就是逐一的把值有序的放到S2中。

支持(0) 反对(0) 无之无 | 园豆:5085 (大侠五级) | 2012-04-13 13:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册