私以为,冒泡排序者,盖较之相邻二数的大小而后重排,且为之数次。
吾列一数组于此,设数组内有十元素,但知其最小之元素列于数组尾端,而不论其中间之元素大小相异。
曰:工于利其事必先利其器。余姑且以一例说之。
#include<stdio.h>
#define n 15
int main()
{
int a[]={48,8,7,4,1,6,2,0,98,52,19,82,38,23,3};
int temp;
for(int i=0;i<n;i++) //重复下述之举
for(int j=0;j<n-1;j++) //比相邻二数
{
if(a[j]>a[j+1]) //升序排列
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(int k=0;k<n;k++)
printf("%d ",a[k]);
getchar();
return 0;
}
设元素个数为n,而欲将3移至首端,则需为之n-1次也。
由是观之,上循环复行下循环,而下循环行相邻升序之事也。