冒泡排序基本思想
將n個記錄看作按縱向排列,每趟排序時自下至上對每對相鄰記錄進行比較,若次序不符合要 求(逆序)就交換。每趟排序結束時都能使排序範圍內關鍵字最小的記錄象一個氣泡一樣升到表上端的對應位置,整個排序過程共進行n-1趟,依次將關鍵字最 小、次小、第三小…的各個記錄“冒到”表的第一個、第二個、第三個…位置上。
初態 第1趟 第2趟 第3趟 第4趟 第5趟 第6趟 第7趟
38 12 12 12 12 12 12 12
20 38 20 20 20 20 20 20
46 20 38 25 25 25 25 25
38 46 25 38 38 38 38 38
74 38 46 38 38 38 38 38
91 74 38 46 46 46 46 46
12 91 74 74 74 74 74 74
25 25 91 91 91 91 91 91
/*
Title: 冒泡排序
Author: Li Aimin
Date: May 2007
演算法功能:冒泡排序演算法實現將一個長度為n的線性表r上的所有元素按關鍵字升序排列。
*/
#include<stdio.h>
void bubblesort(int r[],int n)
{ /*elements are stored in r[1] to r[n]*/
int i,j,flag;
int temp;
flag=1;
i=1;
while((i<n)&&(flag==1)) /*外迴圈控制排序的總趟數*/
{ flag=0;
for(j=n;j>i;j--) /*內迴圈控制一趟排序的進行*/
if(r[j]<r[j-1]) /*相鄰元素進行比較,若逆序就交換*/
{
flag=1;
temp=r[j];
r[j]=r[j-1];
r[j-1]=temp;
}
i++;
}
} /*bubblesort*/
void show(int r[] , int n)
{
/*elements are stored in r[1] to r[n]*/
int i;
for(i=1;i<=n;i++)
printf(" %d ",r[i]);
printf("n");
}
void main()
{
int a[9201],i;
for(i=0;i<9201;i++)
a[i]=9201-i;
//show(a,100000);
bubblesort(a,9200);
show(a,9200);
}