冒泡排序

扫一扫分享
发布者:D&B
发布时间:2018-04-30
版权说明:该作品由用户自己创作,作品中涉及到的内容、图片、音乐、字体版权由作品发布者承担。
侵权举报
上一页 下一页
H5,H5页面制作工具
  • 案例引入:
  • 我们很轻易的就做好了排序。
    那么计算机是如何完成这一任务的呢?
  • 有五张牌,大家会如何实现排序呢?
  • 6
  • 卡片
  • 4
  • 卡片
  • 9
  • 卡片
  • 6
  • 卡片
  • 3
  • 卡片
  • 案例分析:
  • 4    3    6    6    9
  • 4    3    6    6    9
  • 第二趟:4    6    3    6    9
  • 原始数据:6    9    4    3    6
  • 6    4    3    6    9
  • 6    4    9    3    6
  • 6    4    3    9    6
  • 第一趟:6    9    4    3    6
  • 原理:大数下沉,每连续的两个数进行比较,大的数下沉至底。
  • 案例分析:

  • 每趟排序需要交换几次?
  • 一趟排序需要比较几次?
  • 思考一下:
    n个数排序需要几趟?


  • 第四趟:3    4    6    6    9
  • 第三趟:3    4    6    6    9
  • 3    4    6    6    9
  • 每趟交换次数是不固定的
    最多交换次数:(3,4,6,6,9)
    第1 趟: n-1次
    第2 趟: n-2次
    …… ……
    第n-1 趟: 1次
     
    最少交换次数:0
    3,4,6,6,9 
  • 每趟排序需要交换几次呢?
  • 第1 趟: n-1次
    第2 趟: n-2次
    …… ……
    第n-1 趟: 1次
  • 那么每一趟排序需要比较几次?
  • N-1趟
  • N个数排序需要几趟?
  • 短信对话
  • 代码展示:
  • #include "stdio.h"  
             void main()  
        {   
              int a[10];   
              int i, j, temp;   
              printf("Please input ten numbers: \n"); 
              for (i = 0; i < 10; i++)   
                    scanf("%d", &a[i]);   
               for (i = 0; i < 9; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后   
              {   
                    for (j = 0; j < 9 - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较   
                    if (a[j] > a[j+1])   
                    {   
                          temp = a[j];   
                          a[j] = a[j+1];   
                          a[j+1] = temp;   
                    }   
              }   
            
              // 打印排序结果   
              for (i = 0; i < 10; i++)   

  • 小结:
  • 认真理解今天的代码,下去多做练习和尝试,相信大家会有更加有趣的收获,一个小任务~

    大家回去想一下这个算法可以优化吗?可以的话,如何优化呢?