两个有序序列的中位数
#include<stdio.h>
void sort(int data[], int n)
{
int i, j, mix, temp;
for (i = 0; i < n - 1; i++)
{
int mix = i;
for (i = 0; i < n - 1; i++)
{
int mix = i;
for (j = i + 1; j < n; j++)
{
if (data[j] < data[mix])
mix = j;
}
}
if (i != mix)
{
temp = data[i];
data[i] = data[mix];
data[mix] = temp;
}
}
}
void main()
{
int n;
int i;
int str[2000001];
for ( i = 0; i < n; i++)
{
scanf_s("%d", &str[i]);
}
for (i = n ;i < 2 * n; i++)
{
scanf_s("%d", &str[i]);
}
sort(str, 2 * n);
int a = (2 * n - 1) / 2;
printf("%d\n", str[a]);
}
C4700 使用了未初始化的本地变量"name"
不知道
程序可以正常运行
你需要给n设定一个值,比如说 28行这里改成
int n = 5;
同时,str[2000001]过大,内存会爆炸,建议改成str[200]
修改两处之后,可以运行,望采纳!谢谢
老程序员也来解答一波:首先定义n应该等于1000000,先进行赋值操作,赋值了2000000个数后,开始进行排序,排序结束后,打印中间的值,是不是哥们,问题不大,主要是你忘记给n初始化了,希望可以帮到你
代码修改处见注释,供参考:
#include<stdio.h>
int str[200000]; //修改
void sort(int data[], int n)
{
int i, j, mix, temp;
for (i = 0; i < n - 1; i++)
{
int mix = i;
//for (i = 0; i < n - 1; i++) 修改
//{ 修改
//int mix = i; 修改
for (j = i + 1; j < n; j++)
{
if (data[j] < data[mix])
mix = j;
}
//} 修改
if (i != mix)
{
temp = data[i];
data[i] = data[mix];
data[mix] = temp;
}
}
}
void main()
{
int n=3;
int i;
scanf_s("%d",&n); //修改
for ( i = 0; i < n; i++)
{
scanf_s("%d", &str[i]);
}
for (i = n ;i < 2 * n; i++)
{
scanf_s("%d", &str[i]);
}
sort(str, 2 * n);
int a = (2 * n - 1) / 2;
printf("%d\n", str[a]);
}
另外,int str[2000001];
这里申请的空间太多了,栈内存可能不够。可以申请100个或1024个都可以。
你这里应该是一个冒泡函数吧,好像多写了一个for循环。
#include<stdio.h>
void sort(int data[], int n)
{
int i, j, mix, temp;
for (i = 0; i < n - 1; i++)
{
int mix = i;
for (j = i + 1; j < n; j++)
{
if (data[j] < data[mix])
mix = j;
}
if (i != mix)
{
temp = data[i];
data[i] = data[mix];
data[mix] = temp;
}
}
}
void main()
{
int n = 10;
int i;
int str[200];
for (i = 0; i < n; i++)
{
scanf_s("%d", &str[i]);
}
for (i = n; i < 2 * n; i++)
{
scanf_s("%d", &str[i]);
}
sort(str, 2 * n);
int a = (2 * n - 1) / 2;
printf("%d\n", str[a]);
}
你好,已经帮您编好,望采纳!
#include<stdio.h>
void sort(int data[], int n)
{
for (i = 0, j = 0; j < n*2; j++)
{
for (i = 0; i < n * 2 - j; i++)
{
if (str[i] > str[i + 1])
{
temp = str[i];
str[i] = str[i + 1];
str[i + 1] = temp;
}
}
}
printf("中位数:%d", str[(n * 2 + 1) / 2]);
}
void main()
{
int n;
int i,j, temp;
int str[200];
printf("请输入序列个数:\n");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
scanf_s("%d", &str[i]);
}
for (i = n; i < 2 * n; i++)
{
scanf_s("%d", &str[i]);
}
sort(str,n);
}
int声明变量的时候直接赋一个值即可。
void main()
{
int n = 100;
int i;
int str[1024];
for ( i = 0; i < n; i++)
{
scanf("%d", &str[i]);
}
for (i = n ;i < 2 * n; i++)
{
scanf("%d", &str[i]);
}
sort(str, 2 * n);
int a = (2 * n - 1) / 2;
printf("%d\n", str[a]);
}
int n = 100; 要设置运行的次数
int str[1024]; str[2000001] 太大了, 如果要用这么大, 分配内存.
因为你的for循环里面也有用到n,如果不把它弄成全局变量,就得在int i那段语句后面加上n=100之类的,具体数字看你需要的循环次数
#include<stdio.h>
void sort(int data[], int n)
{
int i=0;
int j=0;
int mix=0;
int temp=0;
for (i = 0; i < n - 1; i++)
{
mix = i;
for (i = 0; i < n - 1; i++)
{
mix = i;
for (j = i + 1; j < n; j++)
{
if (data[j] < data[mix])
mix = j;
}
}
if (i != mix)
{
temp = data[i];
data[i] = data[mix];
data[mix] = temp;
}
}
}
void main()
{
int n=3;
int i=0;
int str[20000];//此处恐怕内存溢出,你可以逐步增加 int str[2000001]
memset(str, 0, sizeof(str));
for ( i = 0; i < n; i++)
{
scanf_s("%d", &str[i]);
}
for (i = n ;i < 2 * n; i++)
{
scanf_s("%d", &str[i]);
}
sort(str, 2 * n);
int a = (2 * n - 1) / 2;
printf("%d\n", str[a]);
}
注意一下语法发有关的东西,以前内存的一些东西,防止由于系统的一些原因导致报错
仔细检查一下代码
int n;
这个没有赋值,后面的循环就没法进行。
给n赋值就好了