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

[经验] 冒泡排序法三部曲の冒泡排序原理版(一)

2019-9-12 10:42:05  66 冒泡排序法
分享
0
[table]
[tr][td]声明:编译环境为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. #pragma once
  2. #IFndef _SORT_H_
  3. #define _SORT_H_
  4. void sort(int *array,int length)
  5. {
  6.         for (int j = 0; j < length - 1; j++)
  7.         {
  8.                 for (int i = 0; i < length - 1; i++)
  9.                 {
  10.                         int temp = 0;
  11.                         if (array[i] > array[i + 1])
  12.                         {
  13.                                 temp = array[i];
  14.                                 array[i] = array[i + 1];
  15.                                 array[i + 1] = temp;
  16.                         }
  17.                 }
  18.         }
  19. }
  20. #endif // !_SORT_H_
复制代码
       sort()函数的传入参数为数组地址和数组元素数目,为了实现对含有人一个元素数目的数组进行排序,主函数中调用sizeof()函数计算元素数目。  
  1. #include<stdio.h>
  2. #include"sort.h"
  3. void main()
  4. {
  5.         int array[] = { 5,8,9,4,2,4,6,4,3,2,1 };
  6.         int m=sizeof(array)/sizeof(int);
  7.         printf("元素数目为: %d \n",m);
  8.         sort(array,m);
  9.         printf("The sorted number sequence is:\n");
  10.         for (int n = 0; n < m; n++)
  11.         {
  12.                 printf("%d", array[n]);
  13.                 printf("\t");  //空格一次
  14.         }
  15.         return 0;
  16. }
复制代码
运行结果
bb.png
      上述代码没有问题,但是如果数组是类似{1,2,3,5,4}这样的类型就多进行3x4次排序,为了解决这个问题,对冒泡排序法进行进一步优化,将在冒泡排序法三部曲の二、冒泡排序优化中解决这个问题。

bb.png

评论

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

发经验
课程
    关闭

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

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