冒泡排序

//冒泡的思想(按升序),两个相邻的数进行比较,第一个和第二个比较, 如果第一个比第二个大,就交换顺序,否则不交换。接下来再比较第二个和第三个,仍
//然是如果前者比后者大,就交换顺序。这样依次比较,这样当倒数第二个数和最后一个数比较过后,最后一个数就是这些数里最大的,上述过程称作第一趟冒泡排序。
//按这样的比较规则再比较最后一个数前面的所有数,就能找出倒数第二大的数来。判别排序结束的条件是“在一趟排序过程中没有进行过交换记录的操作”。

// 对数组a[0..n-1]进行起泡排序,使数据从小到大有序


//-------------------------------------

#include <stdio.h>

// 对主函数中调用的函数进行声明

// 函数bubble_sort()的声明

void bubble_sort(int a[],int n);

// 顺序打印数组a中的元素 函数声明
void print_out(int a[],int n);

// 起泡排序 主程序

int count = 0;
int main()
{
    // 测试数据
    int a[]={45,23,67,12,576,97,24,768,12,10};
    printf("起泡排序\n");

   / / 打印排序前的数据
   printf("排序前:\n");
   print_out(a,10);

  // 进行起泡排序
  // TODO (#1#): 这里调用bubble_sort()对数组a排序
    
    bubble_sort(a,10);
  // 打印排序后的数据
  printf("排序后:\n");
  print_out(a,10);
     printf(" %d",count);
  printf("\n");
}

// 函数的实现定义在下面 

// 对数组a[0..n-1]进行起泡排序,使数据从小到大有序
void bubble_sort(int a[],int n)
{
    // TODO (#1#): 这里定义函数中用到的变量
    int i ,j;
int t;
int flag = 1;
for(i=n-1;i>0 && flag == 1;i--)
{
count++;
for(j=0;j<i;j++)
{
flag = 0;          //flag为0  说明没变动 一开始就是正确的顺序 所以循环停止
if(a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
flag = 1;        //flag为1 说明有变动 需要继续循环

}
}
}
} // bubble_sort

// 顺序打印数组a中的元素
void print_out(int a[],int n)
{
int i;

for(i=0; i<n; i++)
printf(" %d",a[i]);
printf("\n");

}


这样就能确定最大的一个数,并把最大的一个数挪到最后面,这样的一个过程称之为一趟冒泡排序。最大的数确定了,接下来就是再排最大数之前的数。


第二趟冒泡排序,确定了倒数第二大的数。

第三趟确定了倒数大三的的数。这样依次就能排好序。直到出现   8  10  12  21  34  56  这样再进行冒泡排序 不会进行交换过程 ,flag一直为0,循环不再继续。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值