繁体   English   中英

如何打印气泡排序功能的结果?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM