排序名称和分数

时间:2014-10-09 17:16:55

标签: c arrays sorting

好的,我有两个阵列。一个有球员的名字,另一个有他们的分数。像这样:

阵列1:[0] - 约翰| [1] - 玛丽| [2] - 尼古拉斯| [3] - 托马斯

数组2:[0] - 20 | [1] - 5 | [2] - 29 | [3] - 26

我要做的是使用quicksort方法和下面的代码对这两个数组进行排序。

void quick_sort(int arr[4],char arr2[4][20],int low,int high)
{
 int pivot,j,temp,i;
 char *temp2;
 if(low<high)
 {
  pivot = low;
  i = low;
  j = high;

  while(i<j)
  {
   while((arr[i]<=arr[pivot])&&(i<high))
   {
    i++;
   }

   while(arr[j]>arr[pivot])
   {
    j--;
   }

   if(i<j)
   {
    temp=arr[i];
    temp2=arr2[i];
    arr[i]=arr[j];
    strcpy(arr2[i], arr2[j]);
    arr[j]=temp;
    strcpy(arr2[i], temp2);
   }
  }

  temp=arr[pivot];
  temp2=arr2[pivot];
  arr[pivot]=arr[j];
  strcpy(arr2[pivot], arr2[j]);
  arr[j]=temp;
  strcpy(arr2[j], temp2);
  quick_sort(arr,arr2,low,j-1);
  quick_sort(arr,arr2,j+1,high);
 }
}

在此之后,当我打印阵列而不是给我这个(我想要的)时:

  1. 玛丽 - 5分
  2. 约翰 - 20分
  3. 托马斯 - 26分
  4. 尼古拉斯 - 29分
  5. 它输出了我:

    1. 约翰--5分
    2. 约翰 - 20分
    3. 尼古拉斯 - 26分
    4. 尼古拉斯 - 29分
    5. 我一直在查看代码,但我找不到问题。你们中的任何一个人有什么建议吗?我需要在午夜之前交付这个

      编辑:我的老师给了我一个代码来对数组中的分数进行排序,但也给了我们另一个包含玩家姓名的数组,它已经对分数进行了排序,她告诉我们让它适用于姓名以及那些我无法上班的事情

2 个答案:

答案 0 :(得分:1)

为什么不使用c标准库? 采取排序功能。 而不是有两个数组只保留一个结构数组。

cppreference.com上的排序调用

http://en.cppreference.com/w/c/algorithm/qsort

答案 1 :(得分:0)

这部分似乎很好奇:

strcpy(arr2[i], arr2[j]);
arr[j]=temp;
strcpy(arr2[i], temp2);

arr2[j]已复制到arr2[i]。然后temp2被复制到arr2[i]。因此,应对arr2[j]毫无意义......我想它应该是:

strcpy(arr2[i], arr2[j]);
arr[j]=temp;
strcpy(arr2[j], temp2);

我同意@Timon:使用qsort是你最好的选择......

编辑:现在,你的问题是一个指针问题:

temp2=arr2[i];
strcpy(arr2[i], arr2[j]);

执行此操作后,temp2的值为arr2[j]! temp2指向arr2[i]的内容,arr2[i]的内容会被arr2[j]覆盖。为防止出现这种情况,您需要将temp2声明为char temp2[20];并执行strcpy(temp2,arr2[i]);

之类的操作