c - C中的排序算法(降序)问题
问题描述
我有一个函数,我希望能够按降序对数组进行排序。该函数将数组作为参数,并且数组的长度始终为 10。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void printHighScore(int *highScore){
int i, j;
int temp;
for (i = 0; i < 10; i++){
for (j = i + 1; j < 10; j++){
if(highScore[i] < highScore[j]){
temp = highScore[i];
highScore[i] = highScore[j];
highScore[j] = temp;
}
}
}
printf("1: %d\n2: %d\n3: %d\n4: %d\n5: %d\n", highScore[0], highScore[1], highScore[2], highScore[3], highScore[4]);
}
int main(){
int *highScore[10] = {1,2,3,4,5,6,7,8,9,10};
printHighScore(highScore);
return 0;
}
我希望输出如下:
1:10
2:9
3:8
4:7
5:6
因为这些是数组的最高值。但是,我得到以下输出:
1:5
2:4
3:3
4:2
5:1
这里出了什么问题?
解决方案
在main
中,您有:
int main(){
int *highScore[10] = {1,2,3,4,5,6,7,8,9,10};
printHighScore(highScore);
return 0;
}
的声明highScore
是错误的。您已经声明了一个指针数组,而不是一个整数数组。编译代码时应该收到警告,因为它传递了不正确的指针类型到printHighScore
. 将声明更改为:
int highScore[10] = {1,2,3,4,5,6,7,8,9,10};
那应该可以解决问题。
您看到您所做的事情的原因是由于您的平台上的指针大于整数。结果,当被解释为整数数组时,你有1, 0, 2, 0, 3, 0, ...
(假设是小端架构)。所以你只对数组的一半进行排序,结果是 5 ... 1 后跟五个零。
通常,您应该始终注意警告,尤其是有关不兼容指针类型的警告。它们几乎总是错误,通常很容易修复。
推荐阅读
- perforce - 如何 p4 将文件从仓库复制到我的密码?
- c# - 获取非项目文件的 FileCodeModel
- python - 为什么这个网页抓取脚本不起作用?
- python - Selenium ActionChains 将光标移动到下拉对象并在其后面单击
- spring-boot - 如何配置 kubernetes 以允许将 ConfingMaps 与 SpringBoot 一起使用
- javascript - 我将如何使用用户上传的图像作为我正在处理的滑动拼图的背景图像?
- python - 单独的数据文件负号和空白分隔符
- javascript - 使用匿名函数调用将动态值传递给关键帧的递归调用超时问题
- java - 如何更正错误:String[] 未初始化
- android - 导航上每个不同片段的不同 FAB 点击监听器