[英]How to print result of bubble sort function?
基本上是初学者的问题。 我不知道如何输出我的函数的结果以及如何检查逻辑是否正确。 任何帮助将非常感谢。
#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;
}
}
}
正如评论中指出的那样,您的冒泡排序实现是错误的,请查看此链接,也许它可以帮助冒泡排序C-实现
您可以编写一个中等程度的通用排序顺序检查函数(用于整数数组):
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.