知識社群Login
書上的 code of bubble- sort, 錯誤 ㄧ堆
by 高顯忠, 2010-12-24 08:26, Views(3260)
#if 0

#endif
// --------------------------------------------------------

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
// --------------------------------------------------------

#define Num 10

int A[10]={0};
// --------------------------------------------------------

void RandomNum()  //氣泡排序法之副程式
{
int i;
srand((unsigned)time(NULL));
printf("產生10個亂數值:");
for (i = 1; i <= Num; i++)
    {
A[i] = rand() % 90+10;  //產生10~100的整數亂數值
printf("%4d",A[i]);
    }
}
// --------------------------------------------------------


void PrintBubSort(int A[], int n)  //氣泡排序法之副程式 
{
    int i;
    printf("\n *** 排序10個亂數值: ");  
    for (i = 0; i <= Num; i++)
    {
printf("%4d", A[i]);
    }   
}
// --------------------------------------------------------



void BubSort(int A[], int n)  //氣泡排序法之副程式
{
    int i, j , t=1, Temp;
    for (i=n-1; i>0; i--)
{
printf("\n *** i= %d\n", i);
for (j =0; j <=i; j++) {
if (A[j] > A[j+1])
{  //兩數交換位置
// show data
printf("swap data of a[j]= %d, a[j+1]= %d\n", A[j], A[j+1]);
Temp = A[j];
A[j] = A[j+1];
A[j+1] = Temp;
}
PrintBubSort(A, n);     //呼叫排序後的結果之副程式
printf("\n");
system("pause");
}
}
// --------------------------------------------------------

// check_data(A, Num);
void check_data(int a[], int n)
{
//
int i, j;
printf("\n in check_data(), n= %d\n", n);
system("pause");
// 0 - (n-1)
for (i=0;i<=(n-1);i++) {
j= i + 1;
// we hope, a[i] <= a[j]
if (a[i] > a[j]) {
printf("\n *** error in check_data(), \n");
printf("a[i]= %d, a[j]= %d\n", a[i], a[j]);
system("pause");
exit(1);
}
}
printf("\n *** check OK in check_data()\n");
system("pause");
}// end of check_data()

// --------------------------------------------------------


int main()
{ //主程式
//
// generate data
    RandomNum();              //呼叫產生10個亂數值的副程式
    printf("\n"); 
    BubSort(A, Num);          //呼叫氣泡排序法的副程式
// check the data
check_data(A, Num);
    PrintBubSort(A, Num);     //呼叫排序後的結果之副程式
    printf("\n"); 
    system("PAUSE");
    return(0);
}// end of main()