基本上是一个初学者问题。我不知道如何输出结果我的函数并检查逻辑是否正确。任何帮助都会非常感谢。
#include<stdio.h>
#include<conio.h>
#define SIZE 3
int sort(int numbers[]);//function prototype
int main (void){
int response[SIZE];
int count;
for (count=0;count<SIZE;count++)
{
printf ("Enter your number %d\n",count);
scanf ("%d",&response[count]);
}
printf ("The array when sorted is\n");
getch();
return 0;
}
//function to sort array elements
int sort(int numbers[])
{
int store;
int x;
for (x=0; x<=SIZE;x++)
{
if (numbers[x+1]<numbers[x])
{
store=numbers[x+1];
numbers[x+1]=numbers[x];
numbers[x]=store;
}
}
}
答案 0 :(得分:0)
正如评论中指出的那样,冒泡排序的实现是错误的, 看看这个链接也许有帮助 Bubble sort C - implementation
答案 1 :(得分:0)
您可以编写适度通用的排序顺序检查功能(对于整数数组):
void check_ascending_order(int n, int data[n])
{
for (int i = 0; i < n - 1; i++)
{
if (data[i] > data[i+1])
fprintf(stderr, "!! FAIL !! data[%d] = %d > data[%d] = %d\n",
i, data[i], i+1, data[i+1]);
}
}
您可以通过以下方式调用它:
check_ascending_order(SIZE, numbers);
如果数据未按非递减顺序排序(它允许相邻的条目相等),它将产生错误消息。
如果您没有至少C99,则需要稍微修改一下代码:
void check_ascending_order(int n, int data[])
{
int i;
for (i = 0; i < n - 1; i++)
{
if (data[i] > data[i+1])
fprintf(stderr, "!! FAIL !! data[%d] = %d > data[%d] = %d\n",
i, data[i], i+1, data[i+1]);
}
}
请注意,这不会产生失败消息,只显示已对一组数据进行了排序,而不是排序函数对所有可能的输入都是正确的。
您可以/应该做的另一项测试是保护;制作原始数据集的副本,并检查原始未排序数据中的每个条目是否也出现在已排序的输出中,就像在原始数据集中一样频繁(因此没有任何遗漏,也没有任何神奇的出现)。
打印结果可以多种方式完成。一个简单的方法是:
void print_array(int n, int data[n])
{
for (int i = 0; i < n; i++)
printf("[%d] = %d\n", i, data[i]);
}
您可以添加类似标记字符串的调整来标识数据,并指定要写入的文件流:
void print_array(FILE *fp, const char *tag, int n, int data[n])
{
fprintf(fp, "%s:\n", tag);
for (int i = 0; i < n; i++)
fprintf(fp, "[%d] = %d\n", i, data[i]);
fflush(fp);
}
然后您可以使用:
print_array(stdout, "Unsorted", SIZE, numbers);
...code to sort the data...
print_array(stdout, "Sorted", SIZE, numbers);
check_ascending_order(SIZE, numbers);
请注意,在检查之前进行打印;它允许您首先查看整个排序结果集。另请注意,排序的3个条目很小;你需要检查更大的集合,如6,7,10,100。