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

时间:2015-05-26 23:08:57

标签: c printing bubble-sort

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

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

        }


    }

}

2 个答案:

答案 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。