gpt4 book ai didi

c - 字符串数组中的冒泡排序算法运行没有错误,但不执行任何操作

转载 作者:行者123 更新时间:2023-11-30 19:02:16 25 4
gpt4 key购买 nike

它应该按字母顺序对 nombres 中的 30 个名称进行排序,函数 burbuja() 执行,但完成后所有名称仍未排序

#include <string.h>
#include <stdio.h>

#define max 30

int mostrar(char nombres[max][80])
{
int i;
printf("\nLa pila ahora tiene los siguentes elementos\n");
for(i = 0; i < max; i++)
printf("%s\n",nombres[i]);
}

void burbuja(char nombres[max][80]) //part that does not work
{
int i, j;
char aux[80];
for (i = 0; i < max; i++)
{
for (j = i + 1; j < max - i - 1; j++)
{
if(nombres[j - 1] > nombres[j])
{
strcpy(aux, nombres[j - 1]);
strcpy(nombres[j - 1], nombres[j]);
strcpy(nombres[j], aux);
}
}
}
}

int main()
{
char nombres[30][80] = {
"Javier", "Paola", "Paco", "Pedro", "Jorge", "Luis", "Champ",
"Alma", "Alicia", "Stephanie", "Mark", "Daniel", "Hank", "Malcom",
"Jaime", "Luisa", "Lila", "Beatriz", "Teresa", "Maria", "Michel",
"Karina", "Karen", "Carmen", "Juan", "Daniela", "Ana", "Gavin",
"Rosa", "Francisco"
};

mostrar(nombres);
burbuja(nombres);
mostrar(nombres);
}

它正确显示未排序的名称,气泡函数执行此操作,然后它显示所有相同的名称仍未排序

...程序已完成,退出代码为 0
按 ENTER 退出控制台

最佳答案

nombres[j - 1] > nombres[j] ,两者 nombres[j-1]nombres[j]是字符数组。数组名称本身会衰减为指向该数组第一个元素的指针。

所以通过nombres[j - 1] > nombres[j] ,您只是比较指向两个数组的第一个元素的指针。

您需要一个像 strcmp() 这样的函数.

for (j = i + 1; j < max - i - 1; j++)不会正确覆盖整个数组。

尝试类似的事情

for (i=0; i<max; i++)
{
for (j=0; j<max-1-i; j++)
{
if(strcmp(nombres[j], nombres[j+1])>0)
{
strcpy(aux, nombres[j]);
strcpy(nombres[j], nombres[j+1]);
strcpy(nombres[j+1], aux);
}
}
}

strcmp()如果第一个字符串按字典顺序位于第二个字符串之后,则返回大于零的值。

编辑:

David C. Rankin指出,您可以将返回类型设置为 mostrar()函数为 void因为您没有返回任何值。

关于c - 字符串数组中的冒泡排序算法运行没有错误,但不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com