在c中排序与字符串数组相关的数组

时间:2016-04-28 14:40:07

标签: c sorting

我试图根据数组的值排序与数组相关的字符串,由于某种原因,排序部分工作..当我尝试对彼此相关的元素进行排序并打印它们时印刷品出乎意料地随机出现的原因

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sorting(char name[][10],double average[],int size);

int main()
{
    double sales1[10],sales2[10],sales3[10],average[10],test,totalm=0,totalfm=0,test2;          
int i=0,j;
char name[10][10],gender[10];
printf("Please input the name, the gender, and the sales for the\nfirst three months followed by a spacebar after each element\n");
scanf("%s %c %lf %lf %lf",&name[0],&gender[0],&sales1[0],&sales2[0],&sales3[0]);
average[i]=(sales1[i]+sales2[i]+sales3[i])/3;
while(strcmp(name[i],"enough")!=0)
{
     i++;
     printf("Please input the name, the gender, and the sales for the\nfirst three months followed by a spacebar after each element\n");
     scanf("%s %c %lf %lf %lf",&name[i],&gender[i],&sales1[i],&sales2[i],&sales3[i]);
     average[i]=(sales1[i]+sales2[i]+sales3[i])/3;
}
sorting(name,average,i);
j=i;
while(i>=0)
 {
    if(gender[i]=='m')
      totalm=totalm+average[i];
    else
      totalfm=totalfm+average[i];
    i--;
 }
   while(j>=0)
    {
    test2=strcmp(name[j],"enough");
    if(test2!=0)
      printf("%s\t%f\n",name[j],average[j]);
      j--;
      }
      printf("total male sales are %f\n",totalm);
      printf("total female sales are %f\n",totalfm);


  }
 int sorting(char name[][10],double average[], int size)
 {
int i=0;
double temp;
char ntemp[20][20];
while(i<=size)
 {
     if(average[i+1]>average[i])
      {
          temp=average[i];
          strcpy(ntemp[i],name[i]);
          average[i]=average[i+1];
          strcpy(name[i],name[i+1]);
          average[i+1]=temp;
          strcpy(name[i+1],ntemp[i]);
      }
    i++;
 }
}

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你所应用的排序在排序功能的第一个条件下似乎是错误的

while(i<=size)
 {
     if(average[i+1]>average[i])
      {
          temp=average[i];

假设当i等于大小时的条件,那么平均[i + 1]将指向任何东西,你可以说零值,你没有设置。 所以尝试更正此代码

for(i=0;i<n;i++)
  {
   for(k=0;k<n-i-1;k++)
    {
     if(a[k]>a[k+1])
      {
       temp=a[k];
       a[k]=a[k+1];
       a[k+1]=temp;
      }
    }
  }

这是冒泡排序,你总是迭代一次比最后一次传递少。 更多see here

答案 1 :(得分:0)

这不是一种有效的排序。您将一个元素冒泡到正确的位置。查找冒泡排序:它有两个循环。内循环移动当前元素,外循环遍历所有剩余的未排序元素。

另请参阅您发布的其他评论以获取更多错误。