c++ 冒泡排序 个人笔记
为什么冒泡排序?
通过重复地遍历未排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列 已经排序完成。这个算法的名字由来是因为越小或越大的元素会经由交换慢慢得像泡泡一样“浮”到数 列的顶端,故而得名!
冒泡排序的代码实现
源代码
以从小到大int类型的数组排列为例:
#include <iostream>
using namespace std;
/*
***************************
*函数作用 : 使两个int类型数据进行交换
*
*函数参数 : left - 传入的是一个地址,存储的是待交换的数据
* right - 传入的是一个地址,指针变量 存储的是待交换的数据
*
*函数返回值 : 无
**************************
*/
void swap(int* left, int* right) {
int tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
}
/*
***************************
*函数作用 : 使用冒泡排序进行从小到大int 类型的数组排列
*
*函数参数 : arr - 传入的是一个数组的首地址
* len - 传入的是数组的总元素个数
*
*函数返回值 : 无
**************************
*/
void bubbleSort(int* arr, int len) {
//i = 数组最后一个元素下标 每循环一次 i--;
for (int i = len - 1; i >= 0; i--) {
bool isSwap = false; //检查是否排序完成
//这个循环作用:
//j = 0; 每循环一次 j++;
//j最大是数组最后一个元素下标-1;
//将一个最大的元素放在i这个数组下标中
for (int j = 0; j <= i-1; j++) {
//当前元素与它的下一个元素比较
//只有当前元素>它的下一个元素进入
if (arr[j] > arr[j + 1]) {
//交换
swap(&arr[j], &arr[j + 1]);
isSwap = true; //只要进入一次就说明还没有排序完成
}
}
//如果已经排序完成直接退出
if (!isSwap) return;
}
}
int main(void) {
int arr[] = { 12,3,45,13,45,67,34,14 };
int len = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, len);
for (int i = 0; i < len; i++) {
printf("%d\t", arr[i]);
}
return 0;
}