小泉向西流 发表于 2014-5-30 19:53:32

指针数组之字符串排序问题,怎么有一个一直不对呢?

本帖最后由 小泉向西流 于 2014-5-30 19:55 编辑

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

void main()
{
      void sort(char *name[], int n);
      void print(char *name[], int n);
      char *name[]={"Follow me", "BASIC", "Great Wall", "FORTRAN", "EAda", "EA","CBD"};
      int n=7;
      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,name)>0 )
                        {
                              k=j;
                        }
                        if( k!=i)
                        {
                              temp=name;
                              name=name;
                              name=temp;
                        }
                }
      }
      
}

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



参见视频 《小甲鱼 C语言 (新版)》 第八章08集 , 总第048集。
讲的是指针数组的运用。

题目, 将若干字符串按字母顺序(由小到大)输出。
但实验结果一直不对。



字符串“CBD” 的位置不对,其他几个又是按顺序排列输出的。 不知道为什么,求解。

elvo 发表于 2014-5-30 20:19:49

额。。你的排序算法有问题。。。我修改了一下#include<stdio.h>
#include<string.h>

int main()
{
      void sort(char *name[], int n);
      void print(char *name[], int n);
      char *name[]={"Follow me", "BASIC", "Great Wall", "FORTRAN", "EAda", "EA","CBD"};
      int n=7;
      sort(name,n);
      print(name,n);
      return 0;
}

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

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

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

小泉向西流 发表于 2014-5-30 21:08:17

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

void main()
{
        void sort(char *name[], int n);
        void print(char *name[], int n);
        char *name[]={"Follow me", "BASIC", "Great Wall", "FORTRAN", "EAda", "EA","CBD"};
        int n=7;
        sort(name,n);
        print(name,n);
}

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

        for(i=0;i<n-1;i++)
        {
                for(j=i+1;j<n;j++)
                {
                        if( strcmp(name,name)>0 )
                        {
                          temp=name;
                                name=name;
                                name=temp;
                        }
                }
        }
       
}

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




加入了K, 为什么就不对呢?


小泉向西流 发表于 2014-5-30 21:10:21

elvo 发表于 2014-5-30 20:19 static/image/common/back.gif
额。。你的排序算法有问题。。。我修改了一下

两个for循环的思路没有错,如3楼

但为什么加入了一个 K的判断, 整体就不对呢

elvo 发表于 2014-5-30 21:20:49

小泉向西流 发表于 2014-5-30 21:10 static/image/common/back.gif
两个for循环的思路没有错,如3楼

但为什么加入了一个 K的判断, 整体就不对呢

额。。。最开始的那个code,若某一次改变了k的值,则回一直进入if( k != i)这个判断里。。。比如说i=0时,j=1就改变k的值,让k=1,则一直进入if(k!= i)的判断体中,每次都要替换一次name和name,恩,i=0时,k的最后改变值是6,则name和name替换,所以CBD会在第一个。。。
页: [1]
查看完整版本: 指针数组之字符串排序问题,怎么有一个一直不对呢?