【发布时间】:2013-10-25 23:05:25
【问题描述】:
我被困住了。我正在尝试使用选择排序通过strcmp 字符串彼此按字母顺序排列结构。问题是我不知道如何对结构内部的字符串进行选择排序,只使用指针,没有索引。
我的结构看起来像:
struct customer
{
char customer_name[MAX_NAME_LENGTH]; /* Last name of customer */
float amount_owed; /* Amount customer owes */
int priority; /* Priority of customer */
};
还有我的函数调用:
sort_customers(quantity, p_customer_records);
以及定义:
/**********************************************************************/
/* Sort the customer database */
/**********************************************************************/
void sort_customers(int quantity, struct customer *p_customer_start)
{
struct customer *p_customer,
*p_outer,
*p_inner,
temp_customer;
for(p_customer = p_customer_start;
(p_customer-p_customer_start) < quantity; p_customer++)
{
p_inner = p_customer;
for(p_outer = p_inner + 1;
(p_outer-p_inner) <= quantity; p_outer++)
if(strcmp(p_inner->customer_name, p_outer->customer_name) < 0)
p_inner = p_outer;
temp_customer = *p_customer;
*p_customer = *p_inner;
*p_inner = temp_customer;
p_inner++;
}
return;
}
老实说,我不知道该怎么做。我无法在互联网上或我的书中找到任何可以帮助我解决此问题的东西。现在,此函数将名称向后排序。我很确定这很容易。我只是想念一些东西。我认为另一双眼睛会有所帮助。希望一切都是描述性的,以帮助任何人了解正在发生的事情。
【问题讨论】:
-
如果它正在工作但排序倒退,请将比较从
< 0更改为> 0。或者将参数的顺序颠倒到strcmp()。您应该仔细考虑内部循环及其上限。你在数组中有元素 0..quantity-1,所以我想你也想要一个< quantity;您可以通过循环到< quantity-1来稍微优化外循环。就目前而言,您有超出范围访问数组的危险。 -
@JonathanLeffler 好的,所以我认为可能是别的东西。我只是尝试了您评论的所有内容,但没有任何改变。还有其他建议吗?
-
还没有;我将不得不用编译器来查看它...
-
@JonathanLeffler 好的,如果你能为我做到这一点,我将非常感激。谢谢您的帮助!如果您需要更多信息,我可以给您。
-
是否有特定原因需要选择排序?还是您只想对您的客户列表进行排序?