鱼C论坛

 找回密码
 立即注册
查看: 4021|回复: 11

4个字符串,首字母从小到大排列。 求指教。

[复制链接]
发表于 2011-12-13 20:58:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zjxy2545 于 2011-12-13 20:59 编辑

#include <stdio.h>
#include <string.h>

void sort(char *name[], int n);
void print(char *name[], int n);

void main()

{
        char *name[] = {"asdf","dsdf","bsdf","esdf"};
        int n = 4;

        sort(name , n);
        print(name , n);
}                                                            ---------题目是上面的字符串用字母顺序由小到大排列
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void sort(char *name[], int n)                                    //这个函数是重点;
{                                                                           //看不懂他是如何进行替换的
        char *temp;                                            //求指教
        int i, j, k;

        for(i = 0; i < n-1; i++)
        {
                k = i;
        for( j=i+1; j < n; j++)
                {
            if(strcmp (name[k], name[j]) > 0)
                        {
                                k = j;
                        }
                        if(k != i)
                        {
                temp = name[i];
                                name = name[k];
                                name[k] = temp;
                        }
                }
        }
}
[/i]
[i][i]--------------------------------------------------------------------------------------------------------------------------------------
void print(char *name[], int n)
{
        int i;

        for(i = 0; i < n; i++)
        {
                printf("%s\n", name);
        }
}
[/i][/i]
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-13 21:07:17 | 显示全部楼层
:L:L::L不懂。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-14 01:42:41 | 显示全部楼层
看不懂:lol
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-14 17:56:07 | 显示全部楼层
google 选择排序
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-14 19:34:05 | 显示全部楼层
void stsrt (char *strings[], int num)
{
        char *temp; int top, seek;

        for (top = 0; top < num-1; top++)
                for (seek = top + 1; seek < num; seek++)
                        if (strcmp (strings[top], strings[seek]) > 0)
                                {
                                  temp = strings[top];
                                  strings[top] = strings[seek];
                                  strings[seek] = temp;
                                }

}

void print(char *strings[],int num)
{
        int i;
        for( i=0;i<num;i++)
                printf("%s\n",strings[i]);
}

int main(void)
{
        int num = 4;
        char *strings[] = {"abcd","bsdb","fdad","dadw"};
        stsrt(strings,num);
        print(strings,num);
        return 0;
}
~                                                                                                   
~         
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-14 22:30:47 | 显示全部楼层
        for(i = 0; i < n-1; i++)
        {
                k = i;
        for( j=i+1; j < n; j++)
                {
            if(strcmp (name[k], name[j]) > 0)
                        {
                                k = j;
                        }
                        if(k != i)
                        {
                temp = name;
                                name = name[k];
                                name[k] = temp;
                        }
                }
        }
这个是这样的,申请一个数组,用于临时存放,然后这段,调用strcmp函数,进行单个字符比较,如果name【i】大于name【k】就调换位置,就是这样排序的,不知道说的对不对
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-19 18:28:01 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-19 19:14:55 | 显示全部楼层
zjxy2545 发表于 2011-12-19 18:28
不是吧,  连版主大人都无法解释,  这都谁写的程序??

这个是经典的排序方法,你google能搜索出来我就不用再解释了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-19 19:50:50 | 显示全部楼层
典型的 选择排序吗   
你可以把 char *name[] = {"asdf","dsdf","bsdf","esdf"};
看成是一个char name[4][5] = {"asdf","dsdf","bsdf","esdf"};
二维数组 这样就能理解了吧?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-21 07:13:38 | 显示全部楼层
sort()函数是一个直接选择排序,第一步就是选出最大或最小排在第一位,其次就是排第二位,将第二位的数和其他后面的数比较并选出次大数放在第二位,strcmp函数是比较字符串大小的数,相信你这个应该知道吧。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-21 12:36:15 | 显示全部楼层
冒泡排序法
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-25 09:22:10 | 显示全部楼层
楼主发的程序有明显的错误,两个函数都有错误
我修正后的程序如下:
#include <stdio.h>
#include <string.h>

void sort(char *name[], int n);
void print(char *name[], int n);

void main()

{
        char *name[] = {"asdf","dsdf","bsdf","esdf"};
        int n = 4;

        sort(name , n);
        print(name , n);
}                                                           
void sort(char *name[], int n)                                    
{                                                                          
        char *temp;                                            
        int i, j, k;

        for(i = 0; i < n-1; i++)
        {
                k = i;
        for( j=i+1; j < n; j++)
                {
            if(strcmp (name[k], name[j]) > 0)
                        {
                                k = j;
                        }
                        }
                        if(k != i)
                        {
                temp = name[i];
                                name[i] = name[k];
                                name[k] = temp;
                        }
               
        }
}
void print(char *name[], int n)
{
        int i;

        for(i = 0; i < n; i++)
        {
                printf("%s\n", name[i]);
        }
}
两处错误不好找,请仔细核对。
sort()函数的功能是利用选择排序对字符串进行从小到大的排序
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-22 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表