You are on page 1of 4

計算機概論第九週 主要內容:氣泡排序法

範例一:輸入欲排序的正整數個數n,以此宣告陣列大小,請使用者輸入,再利用氣泡排序法將這些正整數由小到大排序。
Step 1: 先完成資料輸入及顯示

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n,i;
printf("請輸入正整數個數:");
scanf("%d",&n);
int num[n]; // 宣告陣列長度
for(i=0;i<n;i++)
{
printf("請輸入第%d個正整數(<100):",i+1);
scanf("%d",&num[i]);
}
for(i=0;i<n;i++)
{
printf("%3d",num[i]);
}
printf("\n");
system("pause");
return 0;
}
Step 2: 再完成氣泡排序法
#include <stdio.h>
#include <stdlib.h>
開始
void bsort(int a[],int); // 定義氣泡排序法函數原型
int main(void)
{
int n,i; 已知欲排序個數n
printf("請輸入正整數個數:"); 設定索引變數i=1, j=0
scanf("%d",&n);
int num[n]; // 宣告陣列長度
for(i=0;i<n;i++)
{
printf("請輸入第%d個正整數(<100):",i+1);
scanf("%d",&num[i]); No
} i<n?
bsort(num,n); // 呼叫氣泡排序法的函數 i++;
for(i=0;i<n;i++)
{ Yes 結束
printf("%3d",num[i]);
}
printf("\n"); No
system("pause"); j<n-1?
return 0;
}
Yes j++;
void bsort(int a[],int n) // 氣泡排序法函數
{
int i,j,temp; No
for(i=1;i<n;i++) array[j]>array[j+1]?
{
for(j=0;j<n-1;j++)
{ Yes
if(a[j]>a[j+1])
{ temp=array[j];
temp=a[j];
a[j]=a[j+1]; array[j]=array[j+1];
a[j+1]=temp; array[j+1]=temp;
}
}
} 氣泡排序法流程圖
}
Step 3: 完成氣泡排序後並顯示每個整數排序前的次序
#include <stdio.h>
#include <stdlib.h>
void bsort(int a[],int idx[],int); // 定義氣泡排序法函數原型
int main(void)
{
int n,i;
printf("請輸入正整數個數:");
scanf("%d",&n);
int num[n],idx[n]; // 宣告陣列的長度及記錄原始的次序
for(i=0;i<n;i++)
{
printf("請輸入第%d個正整數(<100):",i+1);
scanf("%d",&num[i]);
idx[i]=i+1; // 產生由1開始之等差數列的陣列做為次序
}
bsort(num,idx,n); // 傳遞引數到氣泡排序法函數進行排序
for(i=0;i<n;i++)
{
printf("%3d(%2d)",num[i],idx[i]);
}
printf("\n");
system("pause");
return 0;
}
void bsort(int a[],int idx[],int n) // 定義氣泡排序法的函數
{
int i,j,temp,k;
for(i=1;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(a[j]<a[j+1]) // 由大到小排序
{
temp=a[j]; // 進行大小數的對調
a[j]=a[j+1];
a[j+1]=temp;
k=idx[j]; // 進行次序的對調
idx[j]=idx[j+1];
idx[j+1]=k;
}
} 執行結果
}
}
範例二:輸入正整數個數n,以此宣告陣列大小,請使用者輸入,再撰寫求最小值的函數。
#include <stdio.h>
#include <stdlib.h>
int min(int a[],int);
int main(void)
{
int n,i,min_no;
printf("請輸入正整數個數:");
scanf("%d",&n);
int num[n]; // 宣告陣列的長度
for(i=0;i<n;i++)
{
printf("請輸入第%d個正整數(<100):",i+1);
scanf("%d",&num[i]);
}
for(i=0;i<n;i++)
printf("%3d",num[i]);
printf("\n");
min_no=min(num,n); // 呼叫最小值函數,接收結果
printf("最小值:%3d\n",min_no);
system("pause");
return 0;
}
int min(int a[],int n)
{
int i,temp;
temp=a[0];
for(i=1;i<=n-1;i++)
{
if(a[0]>a[i])
temp=a[i];
}
return temp; 執行結果
}

You might also like