C语言数组排序出错如何解决
#include<stdio.h>voidmerge(intA[10],intm,intn){inttemp,i,j;for(i=1;i<=n;i++){temp=A[m...
#include<stdio.h>
void merge(int A[10], int m, int n){
int temp, i, j;
for (i = 1; i <= n; i++){
temp = A[m + i];
for (j = m + i - 1; j > 1; j--)
{
if (temp > A[i])break;
A[j + i] = A[j + i - 1];
A[j + i] = temp;
}
}
for (int a = 0; a < m + n; a++)
{
printf("%d ", A[i]);
}
}
int main(){
int a[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
int m = 5;
int n = 5;
merge(a[10], 5, 5);
getchar();
}
0x001B3CE1 处有未经处理的异常:0xC0000005: 读取位置 0xCCCCCCE4 时发生访问冲突。
程序运行时出错,如何解决?谢谢~ 展开
void merge(int A[10], int m, int n){
int temp, i, j;
for (i = 1; i <= n; i++){
temp = A[m + i];
for (j = m + i - 1; j > 1; j--)
{
if (temp > A[i])break;
A[j + i] = A[j + i - 1];
A[j + i] = temp;
}
}
for (int a = 0; a < m + n; a++)
{
printf("%d ", A[i]);
}
}
int main(){
int a[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };
int m = 5;
int n = 5;
merge(a[10], 5, 5);
getchar();
}
0x001B3CE1 处有未经处理的异常:0xC0000005: 读取位置 0xCCCCCCE4 时发生访问冲突。
程序运行时出错,如何解决?谢谢~ 展开
1个回答
展开全部
一、merge(a[10], 5, 5); 改成:merge(a, 5, 5);
二、看不懂你的void merge(int A[10], int m, int n)函数!
二、看不懂你的void merge(int A[10], int m, int n)函数!
追问
这个merge就是把数组a重新排序的,把数组a分别看成两个递增的数组段1,3,5,7,9和2,4,6,8,10,然后把后段的2,4,6,8,10循环与第一队的比较,按大小在第一队数组里插空,就可以重新排序了。谢谢~
追答
#include<stdio.h>
void merge(int A[10], int m, int n){
int temp, i, j;
for (i = 0; i < n; i++){
temp = A[m+i];
for (j = m+i-1; j >= 0; j--)
{
if (temp > A[j]) break;
A[j+1]=A[j];
}
A[j+1] = temp;
}
}
int main(){
//前6个有序递增,后4个有/无序,将后4个有序地插入到前面的顺序中
int a[10] = { 1, 3, 5, 7, 9, 10, 2, 8, 4, 6 };
merge(a, 6, 4);
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
getchar();
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询