数组经典.3.冒泡排序
程序员文章站
2022-07-15 16:27:58
...
冒泡排序是不断将相邻的数两两比较,将小数交换到前面(冒泡),大数交换到后面(沉底)。假定数组a有N个元素,第一轮将a[0]与a[1]比较,a[1]与a[2]比较…最后a[N-2]与a[N-1]比较。这一轮比较下来,最大的元素交换到下标最大元素a[N-1],这个元素已排好序。第二轮仍然从a[0]开始,将次大元素交换到a[N-2]、最后一轮只用比较a[0]和a[1],将次大元素交换到a[1],整个排序结束,共进行N-1轮比较。
函数代码如下.
void bub_sort(int a[N])
{
int i,j,t;
for(i=1; i<=N-1; i++) /*N个数共循环N-1轮*/
for(j=0; j<N-i; j++) /*每轮比较N-i次,第一轮N-1次,最后一轮1次*/
if(a[j]>a[j-1]) /*相邻元素两两比较,若大数在前则交换*/
{t=a[j]; a[j]=a[j+1]; a[j+1]=t;}
}
在调用子函数时,实参是数组名
主程序代码
#include <stdio.h>
#define N 10
void bub_sort(int a[N]);
int main()
{
int a[N],i;
printf("请输入%d个数:\n",N);
for(i=0; i<N; i++) scanf("%d",&a[i]);
bub_sort(a); /*调用冒泡排序子函数*/
printf("排序后:");
for(i=0; i<N; i++) printf("%3d",a[i]);
printf("\n");
return 0;
}
void bub_sort(int a[N])
{
int i,j,t;
for(i=1; i<=N-1; i++) /*N个数共循环N-1轮*/
for(j=0; j<N-i; j++) /*每轮比较N-i次,第一轮N-1次,最后一轮1次*/
if(a[j]> a[j+1]) /*相邻元素两两比较,若大数在前则交换*/
{t=a[j]; a[j]=a[j+1]; a[j+1]=t;}
}
上一篇: 【PHP】设计模式是成功经验的总结,建议好好学习一下
下一篇: 某年月的天数(回顾switch)