我试着用指针用C编写mergeSort算法(我对指针很陌生)。我使用了static int n (n =元素数)和v (元素数组)。mergeSort算法后,每次用随机数对n值进行修改。我做错什么了?
在这里我读了输入
int *v = malloc(NMAX * sizeof(int));
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}下面是mergeSort算法:
void mergeSort(int st, int dr, int *v) {
if (st < dr) {
int mij = (st + dr) / 2;
mergeSort(st, mij, &v);
mergeSort(mij + 1, dr, &v);
mergeElements(st, dr, &v);
}
}
void mergeElements(int st, int dr, int *v) {
int *auxArray = malloc((dr - st + 3) * sizeof(int));
int pos = 0;
int sPos = st;
int mij = (st + dr) / 2;
int dPos = mij + 1;
for (pos = 0; pos < (dr - st + 1); ++pos) {
if (dPos == dr + 1) {
auxArray[pos] = v[sPos];
sPos++;
} else if (sPos == mij + 1) {
auxArray[pos] = v[dPos];
dPos++;
} else {
if (v[sPos] < v[dPos]) {
auxArray[pos] = v[sPos];
sPos++;
} else {
auxArray[pos] = v[dPos];
dPos++;
}
}
}
int i;
for (i = 0; i < pos; ++i) {
v[st + i] = auxArray[i];
}
free(auxArray);
}下面是我得到错误的地方(在main中):
mergeSort(0, n - 1, &v);
printf("%d", n);我让n成为1998609340而不是6。
编辑:这里是我打印元素的地方:
for (i = 0; i < n; ++i) {
printf("%d ", v[i]);
}发布于 2018-10-28 11:45:16
在调用mergeSort和mergeElement时,不应该传递&v。&v实际上是int** 类型,而您的函数原型支持int *。(编译代码时一定有警告)
嘿,这是调试后的代码(调用mergeSort和mergeElements时,刚刚将&v改为v)
#include<stdio.h>
#include<stdlib.h>
#define NMAX 1000
void mergeElements(int st, int dr, int *v);
void mergeSort(int st, int dr, int *v) {
if (st < dr) {
int mij = ( st + dr ) / 2;
mergeSort(st, mij, v);
mergeSort(mij + 1, dr, v);
mergeElements(st, dr, v);
}
}
void mergeElements(int st, int dr, int *v) {
int *auxArray = malloc( (dr - st + 3) * sizeof(int) );
int pos = 0;
int sPos = st;
int mij = ( st + dr ) / 2;
int dPos = mij + 1;
for (pos = 0; pos < (dr - st + 1); ++pos) {
if (dPos == dr + 1) {
auxArray[pos] = v[sPos];
sPos ++;
} else if (sPos == mij + 1) {
auxArray[pos] = v[dPos];
dPos ++;
} else {
if (v[sPos] < v[dPos] ) {
auxArray[pos] = v[sPos];
sPos ++;
} else {
auxArray[pos] = v[dPos];
dPos ++;
}
}
}
int i;
for (i = 0; i < pos; ++i) {
v[st + i] = auxArray[i];
}
free(auxArray);
}
int main()
{
int *v = malloc( NMAX * sizeof(int) );
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; ++i) {
scanf("%d", &v[i]);
}
mergeSort(0,n-1,v);
for(int i=0;i<n;i++)
{
printf("%d ",v[i]);
}
printf("\n");
}https://stackoverflow.com/questions/53024628
复制相似问题