发 帖  
原厂入驻New
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》

冒泡排序法三部曲の一、冒泡排序原理版

2019-9-12 10:30:47  382 C laguage 数据处理
分享
2
本帖最后由 卢小二 于 2019-9-12 10:33 编辑

声明:编译环境为VS2017
语言:C language

针对对象:对n个数从小到大进行排序(从大到小同理)

思路分析:
经典的bubble sort(冒泡排序)原理类似于气泡上升过程,到自身的密度小于上一层介质则上升,排序同理。
以数组{5,4,3,2,1}为例:
第一轮:
由于5大于4,则5右移一位,5大于3,则继续右移,5>2右移一位,5>1右移一位,最终数组变为{4,3,2,1,5},比较次数为4
第二轮:
由于4大于3,则4右移一位,4大于2,则继续右移,5>1右移一位,4<5,停止右移,最终数组变为{3,2,1,4,5},比较次数为4
........
经过第4轮数组最终变为{1,2,3,4,5}。
由上可以总结出,对一个具有n个元素的数组进行排序,需要进行(n-1)(n-1)次比较,复杂度为(n-1)的平方。
代码实现:
   编写了一个头文件和.c文件,在.c文件中调用头文件中的sort()函数即可对任意个元素数目的数组的元素进行排序。
  1. #IFndef _SORT_H_
  2. #define _SORT_H_
  3. void sort(int *array,int length)
  4. {
  5.         for (int j = 0; j < length - 1; j++)
  6.         {
  7.                 for (int i = 0; i < length - 1; i++)
  8.                 {
  9.                         int temp = 0;
  10.                         if (array[i] > array[i + 1])
  11.                         {
  12.                                 temp = array[i];
  13.                                 array[i] = array[i + 1];
  14.                                 array[i + 1] = temp;
  15.                         }
  16.                 }
  17.         }
  18. }
  19. #endif // !_SORT_H_
复制代码
       sort()函数的传入参数为数组地址和数组元素数目,为了实现对含有人一个元素数目的数组进行排序,主函数中调用sizeof()函数计算元素数目。


  1. <font face="微软雅黑">//数组类型为int型,计算整个数组的字节长度,然后计算元素类型的字节长度</font>
  2. <font face="微软雅黑">        int m=sizeof(array)/sizeof(int);</font>
  3. <font face="微软雅黑">        printf("元素数目为: %d \n",m);</font>
  4. <blockquote><font face="微软雅黑">sort(array,m);</font>
复制代码
运行结果
bb.png

上述代码没有问题,但是如果数组是类似{1,2,3,5,4}这样的类型就多进行3x4次排序,为了解决这个问题,对冒泡排序法进行进一步优化,将在冒泡排序法三部曲の二、冒泡排序优化中解决这个问题。











评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
课程
    关闭

    站长推荐 上一条 /10 下一条

    快速回复 返回顶部 返回列表