冒泡排序
Posted leo-lv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。
这将是我第一个记录自己学习轨迹的博客文,本次记录的是冒泡排序。
冒泡排序最大时间复杂度为O(n^2),从空间复杂度和时间复杂度来说冒泡排序算法并不是最好的排序方法。但是冒泡排序有一些优点:冒泡法有一个很形象的名字,冒泡法排序是一种就地排序,冒泡排序还是一种稳定的排序(冲突间相对位置不变)。
冒泡排序的执行步骤为:
- 选定数组最后一位为遍历停止位置;
- 选定数组第一位数;比较当前选定数和后一位数的大小;
- 若当前数大于后面一位数,两个数换位,若遍历停止位还未到达数组第一位,继续执行,否则,输出最后结果。;
- 若下一位不是遍历停止位置:则当前选定位为后面一位数,跳转至步骤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 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 }
本人是数据结构与算法菜鸟,不足之处请各位大佬指正!
以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章