为什么我的随机数组和排序程序不工作?
Why is my random array & sort program not working?
我尝试查找类似的问题,但似乎没有找到任何可以解决我的问题的方法。
我需要编写一个程序来生成随机数数组并通过 插入排序 对它们进行排序。数组的实际随机性并不那么重要;重要的是代码本身生成它们。我读到 here,rand() % n+1
足以满足我生成 1 到 n
之间的数字的需要。
我的程序代码是:
/*
* Task 1, question e
*/
#include <stdio.h>
#include <stdlib.h>
//Random Array Length
#define L 10
#define MAX 100
void naive_sort(int[]);
int main(){
int i, a[L];
//Generate an array of random numbers
for(i=0; i<L; i++)
a[i]= rand() % (MAX+1);
//Unsorted Array
printf("\nUnsorted array: ");
for(i=0; i<L; i++)
printf("%d ", a[i]);
//Sorted Array
naive_sort(a);
return 0;
}
void naive_sort(int a[]){
int i, j, t;
for(i=1; i < L; i++){
t=a[i];
j=i-1;
while((t < a[j]) && (j >= 0)){
a[j+1] = a[j];
j--;
}
a[j+1]=t;
}
printf("\nSorted array: ");
for(i=0; i<L; i++)
printf("%d ", a[i]);
}
该算法似乎只是在重复一些数字,根本没有对列表进行排序。
如果您能就此问题提供任何帮助,我们将不胜感激,我什至尝试过 duck debugging,但这似乎也不起作用!
您正在分配给 a[L]
而不是 a[i]
。
在排序循环中,您将相同的 t
分配给多个 a[j+1]
,这是不对的。原来使用 a[j]
代替。
调换thebwhile循环的两个条件的顺序。当前订单通过在检查 j
仍然是 >= 0
.
之前读取 a[-1]
来调用未定义的行为
在我的 PC [kubuntu, g++] 上你的代码有效。
在你的程序中加入一些打印语句可以帮助你。
您应该调用 insert-sort 的排序路由函数。
乔治·福斯
我尝试查找类似的问题,但似乎没有找到任何可以解决我的问题的方法。
我需要编写一个程序来生成随机数数组并通过 插入排序 对它们进行排序。数组的实际随机性并不那么重要;重要的是代码本身生成它们。我读到 here,rand() % n+1
足以满足我生成 1 到 n
之间的数字的需要。
我的程序代码是:
/*
* Task 1, question e
*/
#include <stdio.h>
#include <stdlib.h>
//Random Array Length
#define L 10
#define MAX 100
void naive_sort(int[]);
int main(){
int i, a[L];
//Generate an array of random numbers
for(i=0; i<L; i++)
a[i]= rand() % (MAX+1);
//Unsorted Array
printf("\nUnsorted array: ");
for(i=0; i<L; i++)
printf("%d ", a[i]);
//Sorted Array
naive_sort(a);
return 0;
}
void naive_sort(int a[]){
int i, j, t;
for(i=1; i < L; i++){
t=a[i];
j=i-1;
while((t < a[j]) && (j >= 0)){
a[j+1] = a[j];
j--;
}
a[j+1]=t;
}
printf("\nSorted array: ");
for(i=0; i<L; i++)
printf("%d ", a[i]);
}
该算法似乎只是在重复一些数字,根本没有对列表进行排序。
如果您能就此问题提供任何帮助,我们将不胜感激,我什至尝试过 duck debugging,但这似乎也不起作用!
您正在分配给 a[L]
而不是 a[i]
。
在排序循环中,您将相同的 t
分配给多个 a[j+1]
,这是不对的。原来使用 a[j]
代替。
调换thebwhile循环的两个条件的顺序。当前订单通过在检查 j
仍然是 >= 0
.
a[-1]
来调用未定义的行为
在我的 PC [kubuntu, g++] 上你的代码有效。
在你的程序中加入一些打印语句可以帮助你。 您应该调用 insert-sort 的排序路由函数。
乔治·福斯