冒泡排序基本思想
將n個記錄看作按縱向排列,每趟排序時自下至上對每對相鄰記錄進行比較,若次序不符合要 求(逆序)就交換。每趟排序結(jié)束時都能使排序范圍內(nèi)關(guān)鍵字最小的記錄象一個氣泡一樣升到表上端的對應(yīng)位置,整個排序過程共進行n-1趟,依次將關(guān)鍵字最 小、次小、第三小…的各個記錄“冒到”表的第一個、第二個、第三個…位置上。
初態(tài) 第1趟 第2趟 第3趟 第4趟 第5趟 第6趟 第7趟
3812121212121212
2038202020202020
4620382525252525
3846253838383838
7438463838383838
9174384646464646
1291747474747474
2525919191919191
/*
Title: 冒泡排序
Author: Li Aimin
Date: May 2007
算法功能:冒泡排序算法實現(xiàn)將一個長度為n的線性表r上的所有元素按關(guān)鍵字升序排列。
*/
#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)) /*外循環(huán)控制排序的總趟數(shù)*/
{ flag=0;
for(j=n;j>i;j--) /*內(nèi)循環(huán)控制一趟排序的進行*/
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);
}
更多信息請查看IT技術(shù)專欄