【问题标题】:How to print result of bubble sort function?如何打印冒泡排序功能的结果?
【发布时间】:2015-05-26 23:08:57
【问题描述】:

基本上是初学者的问题。我不知道如何输出我的函数的结果并检查逻辑是否正确。任何帮助都会非常感谢。

#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;   

        }


    }

}

【问题讨论】:

  • for(int i=0; i
  • 排序不正确。如果它确实正确排序,您将因找到O(n)比较排序而非常出名。
  • 首先要做的是在main 中实际调用sort 函数。然后使用for 循环迭代responses,打印数组中的每个值。但是正如已经指出的那样,您会发现您的排序不正确。即使它有效,它也不是冒泡排序实现。
  • 感谢您的 cmets。我希望你能举一个代码的例子。我正在使用我知道的每一种方式,但我弄错了。感谢您让我知道排序错误。

标签: c printing bubble-sort


【解决方案1】:

正如 cmets 中指出的,您的冒泡排序实现是错误的, 看看这个链接也许有帮助 Bubble sort C - implementation

【讨论】:

    【解决方案2】:

    您可以编写一个适度通用的排序顺序检查函数(用于整数数组):

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多