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