c - 当我在 VScode 上运行此代码时,它显示“test.c 已停止工作”。我试图练习合并排序
问题描述
C/C++
我正在使用 VScode。当我运行这个程序文件时立即停止。
我以前遇到过这种问题。但它发生了,因为我扫描了一个没有“&”寻址的数组。
但这次我找不到问题。
此函数将打印一个数组。
#include <stdio.h>
void print_array ( int size, int data[], char *str) // this function will print array.
{
int i;
printf("%s", str);
for (i = 0; i < size; i++)
{
printf("%d\t", data[i]);
}
}
此函数将采用两个排序数组,对它们进行合并排序,然后给出一个排序数组。
void merge(int a[], int b[], int c[], int x, int y) //this function will merge-sort two sorted arrays.
{
int i = 0, j = 0, k = 0;
while ( i < x && j < y)
{
if (a[i] < b[j])
{
c[k++] = a[i++];
}
else
c[k++] = b[j++];
}
while (i < x)
{
c[k++] = a[i++];
}
while(j < y)
{
c[k++] = b[j++];
}
}
这个主函数将获取数组的元素,并执行上述函数中定义的所有任务
我认为问题出在int main()函数中。因为问题根本没有开始运行。
int main (void)
{
int x, y, i, j;
int a[x];
int b[y];
int c[x+y];
printf("Enter size of first array: ");
scanf("%d", &x);
printf("\nEnter sorted elements of first array:\n");
for(i = 0; i < x; i++)
{
scanf("%d", &a[i]); //it will take elements of array.
}
print_array( x, a, "\nFirst array\n"); //print the first array.
printf("\n\n");
printf("Enter size of second array: ");
scanf("%d", &y);
printf("\nEnter sorted elements of Second array:\n");
for(j = 0; j < y; j++)
{
scanf("%d", &b[i]);
}
print_array( y, b, "\nSecond array\n"); //print second array.
printf("\n\n");
merge(a, b, c, x, y); /merge sort
print_array( x+y, c, "\nSorted Data\n"); //print sorted data
printf("\n\n");
return 0;
}
解决方案
您实际上要实施什么?如果您尝试实现合并排序算法,这不是实现合并排序的方法。
你的问题很模糊。您没有指定是否遇到运行时错误或编译时错误。
如果您正确复制了代码,我认为您会收到编译错误,因为缺少注释/
。修正评论。将该行编辑merge(a, b, c, x, y); /merge sort
为merge(a, b, c, x, y); //merge sort
.
您还可能会遇到运行时错误或未定义的行为,因为您声明了三个数组int a[x]
,int b[y]
&int c[x+y];
没有初始化 & 的x
值y
。一种可能的解决方案是初始化x
&的值y
。
int main(void) {
int x, y, i, j;
printf("Enter size of first array: ");
scanf("%d", &x);
//declare array a[x] here
int a[x];
printf("\nEnter sorted elements of first array:\n");
for (i = 0; i < x; i++) {
scanf("%d", &a[i]); //it will take elements of array.
}
print_array(x, a, "\nFirst array\n"); //print the first array.
printf("\n\n");
printf("Enter size of second array: ");
scanf("%d", &y);
//declare array b[y] here
int b[y];
printf("\nEnter sorted elements of Second array:\n");
for (j = 0; j < y; j++) {
scanf("%d", &b[i]);
}
print_array(y, b, "\nSecond array\n"); //print second array.
printf("\n\n");
//declare array c[x+y] here
int c[x + y];
merge(a, b, c, x, y); //merge sort
print_array(x + y, c, "\nSorted Data\n"); //print sorted data
printf("\n\n");
return 0;
}
最后一个问题的另一个解决方案是使用宏 MAX
声明数组,假设 和 的x
值y
小于MAX
。注意:这个过程是最有效的内存。
#define MAX 100000
int main(void) {
int x, y, i, j;
int a[MAX];
int b[MAX];
int c[MAX + MAX];
.....
.....
.....
}
推荐阅读
- typescript - 如何忽略 Prettier 格式化的引号
- multithreading - 了解弱内存模型
- html - 嵌套导航栏未在主导航下对齐
- node.js - 在gremlin nodejs中的顶点之间添加边
- python - 如何在Python中迭代开始日期和结束日期之间的所有日子
- android - 单击 RecyclerView 项时,显示一个新的 Activity,其中包含有关该项的信息
- azure - 为 VueJs 前端和 Azure 函数应用程序后端实现身份验证/授权的最佳方法是什么
- android - 访问单例中的应用程序上下文
- chef-infra - Chef:是否可以定义一个使用模板的 Chef 资源,并从另一个食谱中调用它?
- ios - 摆脱 Bolts 框架中的 UIWebView(解析框架依赖)