注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/100556832
1 冒泡排序
冒泡排序 (Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
(以上均来自百度百科)
冒泡排序的基本思想:序列中相邻两个元素两两比较,当一个元素大于右边的元素时,交换置为;否则位置不变。直到整个序列都满足排序要求为止。
下面举个例子进行说明,如下图所示
故,对于一组包含n个数据的记录,冒泡排序就是要每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。冒泡排序在最坏的情况下需要进行n-1趟排序
第1趟:依次比较0和1、1和2、2和3 … (n-2) 和 (n-1)索引的元素,如果发现第1个数据大于第2个数据,交换他们,经过第1趟排序,最大的元素排到了最后;
第2趟:依次比较0和1、1和2、2和3 … (n-3) 和 (n-3)索引的元素,如果发现第1个数据大于第2个数据,交换他们,经过第2趟排序,第二大的元素排到了倒数第二个位置;
… 以此类推
第n-1趟:比较0和1索引的元素,如果发现第1个数据大于第2个数据,交换他们,经过第n-1趟排序,第二小的元素排到了第二个位置。
冒泡排序动态示意图如下所示
冒泡排序算法复杂度为 O ( n 2 ) O( {n^2}) O(n2)
2 实现简单的冒泡排序
代码示例
#include<iostream>
using namespace std;
template<typename T>
//使用冒泡排序 让数组中的数字从小到大排序 //
void bubbleSort(T arr[], int length)
{
int temp;
for (int i = 0; i < length; i++)
{
for (int j = length - 1; j >= i + 1; j--)//此处判断条件也可写成j>=0,前面有一部分是排好序的,所以这里可以这么写。
{
if (arr[j] < arr[j - 1])
{
temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
int a[10] = { 10,9,8,7,6,5,4,3,2,1 };
bubbleSort(a, 10);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
cin.get();
return 0;
}
运行结果
参考资料
[1] 算法与数据结构–综合提升篇(c++版)
[2] https://cuijiahua.com/blog/2017/12/algorithm_1.html
[3] https://blog.csdn.net/ssswill/article/details/90077852