起泡法是從一端開始比較的,第一次循環就是把最大數放到最後一個位置,第二次循環就是把第二最大數放到倒數第二位置。整個過程就像燒開水一樣,較小值像水中的氣泡一樣逐趟往上冒,每一趟都有一塊“最大”的石頭沉到水底。
基本介紹
- 中文名:起泡法
- 特點:從一端開始比較的
- 含義:循環實現數據的排序
- 學科:程式設計
如此循環實現數據的排序。下面舉一個用起泡法對n個數字進行排序的例子:
#include<stdio.h>
void main()
{
int a[100];
int n,i,j,t;
printf("請輸入要排序的數字個數:");
scanf("%d",&n);
printf("請輸入各個數字:");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<(n-1);j++) /*進行n-1次循環,實現n-1趟比較*/
for(i=0;i<(n-1-j);i++) /*在每一趟中進行n-1-j次比較*/
if(a[i]>a[i+1]) /*相鄰兩個數比較*/
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("經過排序後的數字為:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
那么我們是否可以找到最小數的同時找到最大數呢?當然可以。方法是在一端起泡時同時在另一端也進行起泡。即反向起泡。下面的程式段實現的是雙向起泡:
void Bubble2Sort(int* pData,int Count)
{
int temp;
int left = 1;
int right =Count -1;
int t;
do
{
//正向的部分
for(int i=right;i>=left;i--)
{
if(pData {
iTemp = pData;
pData = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}
left = t+1;
//反向的部分
for(i=left;i {
if(pData {
iTemp = pData;
pData = pData[i-1];
pData[i-1] = iTemp;
t = i;
}
}