冒泡排序算法代码是什么?

冒泡排序算法介绍

在计算机科学中,冒泡排序算法(Bubble Sort,台湾译作:泡沫排序或气泡排序)是一种简单的排序算法,它重复地遍历待排序的元素,每次比较相邻的两个元素,如果顺序错误就交换它们的位置,直到没有任何一对元素需要交换位置,排序完成。

冒泡排序算法的实现方式有多种,但本文以最基础的方法进行介绍。

冒泡排序算法代码

下面是冒泡排序算法的C++实现代码:

void BubbleSort(int arr[], int n){

for (int i = 0; i < n - 1; i++){

for (int j = 0; j < n - 1 - i; j++){

if (arr[j] > arr[j + 1]){

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

}

代码解析

现在我们来逐一解析上述代码:

void BubbleSort(int arr[], int n)

这是一个函数声明,其函数名为BubbleSort,接受两个参数:一个是待排序的数组arr,另一个是数组长度n,函数的返回值为void。

for (int i = 0; i < n - 1; i++){

for (int j = 0; j < n - 1 - i; j++){

if (arr[j] > arr[j + 1]){

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

这是冒泡排序算法的核心部分,其中包含两层循环,外层循环控制比较的轮数,内层循环则控制单轮比较的次数。

首先,我们暂且不去讨论轮数与次数的关系,先看内部的条件判断语句:

if (arr[j] > arr[j + 1]){

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

这个if语句指的是:如果数组中第j个元素大于第j+1个元素,则交换这两个元素的位置。这里交换是通过中间量temp实现的。

当然,最后的排序结果是将小的元素逐渐“冒泡”到最前面,而大的元素不断被“沉底”。下面我们再来讲讲轮数与次数的关系:

1. 外层循环控制比较的轮数,每一轮比较完毕后,都会将当前轮数加1。

2. 内层循环的结束条件是:j < n - 1 - i。显然,第一轮比较一次之后,最大的元素就已经沉底了,也就是说,每轮比较都可以少一次,所以,内层的循环次数应该是依次递减的。

因此,可以得出完整的排序时间复杂度为:O(n^2)。

代码应用

下面这个例子展示了如何将冒泡排序算法应用到实际问题中。

假设一个公司要对员工的薪资进行排序,那么我们就可以使用冒泡排序算法对薪资数据进行降序排列,找出公司内的高工资员工。

#include <iostream>

using namespace std;

void BubbleSort(int arr[], int n);

int main(){

int salary[] = {2000, 8000, 5000, 3000, 10000, 4000};

int num = sizeof(salary) / sizeof(int);

BubbleSort(salary, num);

for (int i = 0; i < num; i++){

cout << salary[i] << " ";

}

cout << endl;

return 0;

}

void BubbleSort(int arr[], int n){

for (int i = 0; i < n - 1; i++){

for (int j = 0; j < n - 1 - i; j++){

if (arr[j] < arr[j + 1]){

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

}

解析:

上述代码中,我们首先定义了一个存储员工薪资的数组salary,并读取该数组的大小,接着调用了冒泡排序函数BubbleSort,将salary传入。排序之后,再遍历输出薪资数组中的元素,也就是按照降序排列的员工薪资。

执行上述也代码,输出结果为:10,000 8,000 5,000 4,000 3,000 2,000。

总结

冒泡排序算法虽然简单,但其时间复杂度确实相当高的,尤其是对于较大的数据量,算法执行时间会变得非常缓慢,因此在实际开发中,并不常使用冒泡排序算法。但如果希望学习算法的基础知识,冒泡排序算法是一个挺不错的例子。

后端开发标签