簡體   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