#include <stdio.h>
int main(){
int i,j,b;
int a[5]={2,4,1,5,3};
for(i=0;i<4;i++){
int max=a[i];
for(j=i+1;j<5;j++){
if(a[j])>max){
max=a[j];//找出每轮最大的数
b=j;//标记其位置
}
}
int c=a[i];
a[i]=a[b];
a[b]=c;//将每轮最大的数与目标位置的数交换
}
for(i=0;i<5;i++)
printf("%d ",a[i]);
return 0;
}
一个从大到小的选择排序结果不对,哪里错了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 浅笑临轩 2021-11-18 09:51关注
你的代码只有找到最大数了才变更 b的下标,
如果这个数本身就是最大数,b还是上次的下标,你下面依旧按已找到最大数去交换位置,当然错啦。
我的改动为,每次外层循环把 i赋值给最大数下标(b),然后找到最大数后,判断 i和b不相等才交换位置。
输出结果为5,4,3,2,1/** 测试类 */ public static void main(String... args) { int i, j; //循环下标 int b; //最大数的下标 int[] a = new int[]{2, 4, 1, 5, 3}; for (i = 0; i < a.length - 1; i++) { int max = a[i]; b = i; //默认每次 i是最大数 for (j = i + 1; j < a.length; j++) { if (a[j] > max) { max = a[j]; //找出每轮最大的数 b = j; } } // 需要交换才做交换 if(b != i) { int c = a[i]; a[i] = a[b]; a[b] = c;//将每轮最大的数与目标位置的数交换 } } for (i = 0; i < a.length; i++) { System.out.println(a[i]); } System.exit(0); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
- ¥20 cad图纸,chx-3六轴码垛机器人
- ¥15 移动摄像头专网需要解vlan
- ¥20 access多表提取相同字段数据并合并
- ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
- ¥20 Java-Oj-桌布的计算
- ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
- ¥20 有人知道这种图怎么画吗?
- ¥15 pyqt6如何引用qrc文件加载里面的的资源
- ¥15 安卓JNI项目使用lua上的问题