好的,我有两个阵列。一个有球员的名字,另一个有他们的分数。像这样:
阵列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);
}
}
在此之后,当我打印阵列而不是给我这个(我想要的)时:
它输出了我:
我一直在查看代码,但我找不到问题。你们中的任何一个人有什么建议吗?我需要在午夜之前交付这个
编辑:我的老师给了我一个代码来对数组中的分数进行排序,但也给了我们另一个包含玩家姓名的数组,它已经对分数进行了排序,她告诉我们让它适用于姓名以及那些我无法上班的事情答案 0 :(得分:1)
为什么不使用c标准库? 采取排序功能。 而不是有两个数组只保留一个结构数组。
cppreference.com上的排序调用
答案 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]);