[英]Selection Sort on an Array of Objects
在网上四处张望,但至今找不到任何相关信息。 我在C ++入门课程中,有一个正在处理对象数组的项目。 对象(称为媒体)具有名称和等级。 我将三个不同的媒体对象放入媒体对象数组。 我需要找到一种按名称对它们进行排序的方法。 为我提供了用于c字符串选择排序的代码,但还无法弄清楚将其转换为处理媒体对象的确切方法。 这是我对C弦的选择排序。
void selectsort(char str[][20], int N)
{
int pass, j, min;
char temp[20];
for (pass = 0; pass <= N - 2; pass++) // passes
{
min = pass;
for (j = pass + 1; j < N; j++) // in each pass
if (strcmp(str[min], str[j]) > 0)
min = j;
strcpy(temp, str[min]);
strcpy(str[min], str[pass]);
strcpy(str[pass], temp);
}
}
我已经通过重载<和来摆脱了strcmp
int media::operator<(media med)
{
return strcmp(mname, med.mname);
}
和strcpy通过重载=与
void media::operator=(media med)
{
strcpy(mname, med.mname);
}
我相信这将返回相同的结果,是吗?
到目前为止,这是我的代码(只是让我自己不了解如何做)。
void selsort(media mry[], int n) // mry[] is the object array, n is the
// number of objects in the array
{
int pass, j, min;
media temp[1];
for (pass = 0; pass <= n - 2; pass++) // passes
{
min = pass;
for (j = pass + 1; j < n; j++) // in each pass
if ((mry[min] < mry[j]) < 0)
min = j;
temp = mry[min];
mry[min] = mry[pass];
temp = mry[min];
}
}
我知道这段代码有很多缺陷。 临时比较无法正常工作,当我尝试使用* temp或temp [0](在此处尝试太阳下的所有操作)时,我得到了损坏的数据错误。 我似乎无法弄清楚。 我一直在努力理解各种事物,这只会增加对侮辱的侮辱。 (还请注意,有些表示法可能不正确,但这是我在本课中所教的内容以及这位教授要求我们编写的内容)
谢谢你的帮助!
您的代码有两件事:
media temp[1];
您为什么要将用于交换的临时媒体存储区设置为1的数组? temp = mry[min]; mry[min] = mry[pass]; temp = mry[min];
temp = mry[min]; mry[min] = mry[pass]; temp = mry[min];
看到有什么问题吗? 这是调整后的功能,BTW可以正常工作:
void selsort(media mry[], int n) // mry[] is the object array, n is the
// number of objects in the array
{
int pass, j, min;
media temp;
for (pass = 0; pass <= n - 2; pass++) // passes
{
min = pass;
for (j = pass + 1; j < n; j++) // in each pass
if ((mry[min] < mry[j]) < 0)
min = j;
temp = mry[min];
mry[min] = mry[pass];
mry[pass] = temp;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.