c - 通过与边缘交换最大值和最小值来组织表格的程序(一直这样做直到完成)
问题描述
#include <stdio.h>
#include <stdlib.h>
void minimaxi(int t[],int bs,int bi,int *ma,int *mi){
int j;
*ma=bi; *mi=bi;
for(j=bi;j<=bs;j++){
if (t[j]<t[*mi]) { *mi=j;} ;
}
for(j=bi;j<=bs;j++){
if (t[j]>t[*ma]) { *ma=j;} ;
}
}
void permut(int *x, int *y){
*x=*x+*y;
*y=*x-*y;
*x=*x-*y;
}
void triminmax(int t[], int n){
int bi, bs, mx, mn;
bs=n-1;
bi=0;
do {
minimaxi(t,bs,bi,&mx,&mn);
permut(&t[mx],&t[bs]);
permut(&t[mn],&t[bi]);
bs=bs-1;
bi++;
} while(bs>=bi);
}
int main()
{
int t[100], bs, bi, n, i,z;
printf("give the table length \n");
scanf("%d", &n);
z=n;
for(i=0;i<n;i++){
printf("enter T[%d]\n", i);
scanf("%d", t+i);
}
triminmax(t,n);
for(i=0;i<z;i++){
printf("%d\n", t[i]);
}
return 0;
}
目的是创建一个使用以下内容组织表格的程序:首先找到案例 0 和案例 n-1(最后一个案例)之间的最大值和最小值,然后将最大值与案例 n-1 交换,将最小值与案例交换0 然后它查找 1 和 n-2 之间的最大值和最小值,并将它们与 1 和 n-2 交换,它会一直运行直到表被组织好 问题是当我在编译所有我发现是随机数之后打印预期的组织表时
解决方案
您的代码有两个问题:
您正在传递permut函数的地址,因此有可能两次传递相同的地址,因此这种情况的值等于 0
并且有可能最小的数字在最后一个案例中,因此包含最大数字的案例与之切换,然后最大的数字被发送到第一个案例。因此,这是您的代码的修订版本以及其他小修复:
#include <stdio.h> #include <stdlib.h> void permut(int *x, int *y) { *x=*x+*y; *y=*x-*y; *x=*x-*y; } void minimaxi(int t[],int bs,int bi,int *ma,int *mi) { int j; *ma=bi; *mi=bi; for(j=bi;j<=bs;j++) { if (t[j]<=t[*mi]) *mi=j; } if (*mi!=bi) permut(&(t[*mi]),&(t[bi])); for(j=bi;j<=bs;j++) { if (t[j]>t[*ma]) *ma=j; } if (*ma!=bs) permut(&(t[*ma]),&(t[bs])); } void triminmax(int t[], int n) { int bi, bs, mx, mn; bs=n-1; bi=0; do { minimaxi(t,bs,bi,&mx,&mn); bs=bs-1; bi++; } while(bs>=bi); } int main() { int *t, bs, bi, n, i,z; t=malloc(100*sizeof(int)); printf("give the table length \n"); scanf("%d", &n); z=n; for(i=0;i<n;i++) { printf("enter T[%d]\n", i); scanf("%d", t+i); } triminmax(t,n); for(i=0;i<z;i++) { printf("%d\n", t[i]); } return 0; }
推荐阅读
- python - 我在 python 中分别导入和加载图像数据时遇到问题
- vue.js - 通过 Prop 从根传递到子组件的 VueJs 数据仅产生一个可观察的对象
- oracle - 使用 org.apache.tomcat.jdbc.pool.DataSource 连接 Oracle 18c 时出错
- c++ - 给定一个数字及其根值,找到一个数字的第 n 个根
- java - 使用 GSON 将 JSON 数组字段转换为类对象
- java - 为什么在使用布尔语句时内容没有在 system.out.println 语句中打印
- sql-server - 从字符串转换日期和/或时间时转换失败 - 为什么?
- pandas - 根据其他分类列的条件创建新列
- c# - 自动映射数组类
- c# - 一起扫描多个图像时在 twain dll 中进行磁盘文件传输