c - 无法正确排序字符串数组
问题描述
假设我有两个数组,其中一个包含某些数字,另一个包含与这些数字对应的名称,其方式sums[i]
与names[i]
.
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main()
{
char *names[] = {"William","Olivia","Willaim","Olivai","Lily","Lyli"};
int sums[6] = {58, 48, 58, 48, 30, 30};
int i, j, s = 6;
char *temp_char;
int temp_int;
for(i=0 ; i < s-1 ; i++){
for (j=0; j<s-i; j++){
if (sums[j]<sums[j+1]){
temp_char = names[j+1];
temp_int = sums[j+1];
names[j+1] = names[j];
sums[j+1] = sums[j];
names[j] = temp_char;
sums[j] = temp_int;
}
if ((sums[j] == sums[j+1]) && (strcmp(names[j], names[j+i])>0)) {
temp_char = names[j+1];
names[j+1] = names[j];
names[j] = temp_char;
}
}
}
for (i = 0; i<s; i++){
printf("%d ", sums[i]);
printf("%s\n", names[i]);
}
return 0;
}
这是原始代码的一部分,经过编译但没有真正正确排序。然而,这个突然返回分段错误。
为什么我突然收到此错误,为什么排序不起作用?
解决方案
解决方案:
由于变量 j可能会越过索引范围,因此您会收到错误消息。
所以,你应该检查j < si-1; 在内循环中。我还使用isSwapped布尔变量优化了您的代码。
代码:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main()
{
char *names[] = {"William","Olivia","Willaim","Olivai","Lily","Lyli"};
int sums[6] = {58, 48, 58, 48, 30, 30};
int i, j, s = 6;
char *temp_char;
int temp_int;
bool isSwapped; // for optimization
for(i=0 ; i < s ; i++){
isSwapped = false;
for (j=0; j<s-i-1; j++) {
// Sort by sum
if (sums[j]<sums[j+1]){
temp_char = names[j+1]; temp_int = sums[j+1];
names[j+1] = names[j]; sums[j+1] = sums[j];
names[j] = temp_char; sums[j] = temp_int;
isSwapped = true;
}
// Sort by name (only if values of sum is same)
else if ((sums[j] == sums[j+1]) && (strcmp(names[j+1], names[j])>0)) {
temp_char = names[j+1];
names[j+1] = names[j];
names[j] = temp_char;
isSwapped = true;
}
}
if (!isSwapped) break;
}
for (i = 0; i<s; i++){
printf("%d ", sums[i]);
printf("%s\n", names[i]);
}
return 0;
}
推荐阅读
- reactjs - 为什么 useEffect 的依赖数组中需要历史记录
- r - 需要帮助制作 Ordihull
- javascript - 单击按钮时在 javascript 中执行 selenium 脚本
- reactjs - 电子商务应用 OrderScreen 处理的最佳实践?
- python - Tkinter 文本使按钮向两侧移动
- r - 在嵌套列表中的矩阵上使用 rbind?
- directx-11 - DirectX11 采样 1D 纹理给出不正确的颜色
- apache-spark - Spark中GroupByKey.MapGroups的逆?
- html - 自动列出当前 Object 数据迭代的每个属性值的动态表组件(ngFor 指令);
- .htaccess - htaccess 重定向只显示 index.html