• 冒泡排序


        这将是我第一个记录自己学习轨迹的博客文,本次记录的是冒泡排序。

        冒泡排序最大时间复杂度为O(n^2),从空间复杂度和时间复杂度来说冒泡排序算法并不是最好的排序方法。但是冒泡排序有一些优点:冒泡法有一个很形象的名字,冒泡法排序是一种就地排序,冒泡排序还是一种稳定的排序(冲突间相对位置不变)。

        冒泡排序的执行步骤为:

    1. 选定数组最后一位为遍历停止位置;
    2. 选定数组第一位数;比较当前选定数和后一位数的大小;
    3. 若当前数大于后面一位数,两个数换位,若遍历停止位还未到达数组第一位,继续执行,否则,输出最后结果。;
    4. 若下一位不是遍历停止位置:则当前选定位为后面一位数,跳转至步骤3, 否则:遍历停止位置向数组开始的方向移动一位,则跳转至步骤2;

        改进的冒泡排序实际上是在每次向后遍历后判断是否有交换位置的操作发生,若没有,说明已经全部排序完成,当即停止遍历,输出结果。

    C++代码如下:

    头文件Sort.h:

     1 #ifndef _SORT_H
     2 
     3 #define _SORT_H
     4 
     5 class bubble_sort{
     6 
     7 private:
     8 
     9          int *Array,Length;
    10 
    11 public:
    12 
    13          bubble_sort(int *Array1,int Length);
    14 
    15          int *sort_bubble();
    16 
    17 };
    18 
    19 #endif

    Cpp文件 bubble_sort:

     1 #include "Sort.h"
     2 
     3 bubble_sort::bubble_sort(int *Array1,int Length1)//带参数的的构造函数
     4 
     5 {
     6 
     7          this->Array = Array1;
     8 
     9          this->Length = Length1;
    10 
    11 }
    12 
    13  
    14 
    15 /******************************************************************************************************
    16 
    17 冒泡排序的时间复杂度为O(n2),改进后判断是否不需要再换位,提前退出遍历。
    18 
    19 *********************************************************************************************************/
    20 
    21  int *bubble_sort::sort_bubble()//执行冒泡排序的函数sort_bubble
    22 
    23 {
    24 
    25          bool flag = false;
    26 
    27          for (int i = Length; i > 0; i--)
    28 
    29          {
    30 
    31                    for (int j = 0; j < i-1; j++)
    32 
    33                    {
    34 
    35                             if (Array[j] > Array[j + 1])
    36 
    37                             {
    38 
    39                                      int swap_num = Array[j];
    40 
    41                                      Array[j] = Array[j + 1];
    42 
    43                                      Array[j + 1] = swap_num;
    44 
    45                                      bool flag = true;
    46 
    47                             }
    48 
    49                    }
    50 
    51                    if (flag)
    52 
    53                             break;
    54 
    55          }
    56 
    57          return Array;
    58 
    59 }

    Cpp 文件Main:

     1 /*********************************************
     2 
     3           Write by Leo Lv
     4 
     5           2019.03.29
     6 
     7           Bubble_sort algorithm
     8 
     9 ********************************************/
    10 
    11 #include <iostream>
    12 
    13 #include "Sort.h"
    14 
    15 using namespace std;
    16 
    17 void main()
    18 
    19 {
    20 
    21          /*************冒泡排序*******************************/
    22 
    23          int Array[10] = { 100, 10000, 6, 8, 9, 1, 3, 2, 4, 0 };
    24 
    25          bubble_sort c(Array,10);
    26 
    27          for (int i = 0; i < 10;i++)
    28 
    29             cout << *(c.sort_bubble()+i)<< endl;
    30 
    31          /********************************************************/
    32 
    33  
    34 
    35          system("pause");
    36 
    37 }

    本人是数据结构与算法菜鸟,不足之处请各位大佬指正!

  • 相关阅读:
    单例模式及C++实现代码
    Nginx学习笔记4 源码分析
    探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别2
    SVM学习资料
    11 款最好 CSS 框架
    发布Activex全过程
    Integer.parseInt(String s, int radix)方法介绍(修正版)
    Windows 各种计时函数总结(QueryPerformanceCounter可以达到微秒)
    不断摸索发现用 andy 模拟器很不错,感觉跟真机差不多
    Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)
  • 原文地址:https://www.cnblogs.com/leo-lv/p/10621865.html
Copyright © 2020-2023  润新知