冒泡排序属于交换排序的一种。
冒泡排序
算法思想:
复杂度
代码实现
/**
* 冒泡排序
* @file BubbleSort.cpp
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
// void BubbleSort(int A[], int n) {
// for(int i = 0;i < n;i++) {
// bool flag = false;
// for(int j = i+1;j < n;j++) {
// if(A[i] > A[j]) {
// swap(A[i], A[j]);
// flag = true;
// }
// }
// if(flag == false) { // 本趟遍历没有发生交换,说明表已经有序
// return ;
// }
// }
// }
// void BubbleSort(int A[], int n) {
// for(int i = 0;i < n-1;i++) {// 控制遍历的趟数
// bool flag = false;
// for(int j = n-1;j > i;j--) {
// if(A[j] < A[j-1]) {
// swap(A[j], A[j-1]);
// flag = true;
// }
// }
// if(flag == false) {// 本趟遍历没有发生交换,则说明表已经有序
// return ;
// }
// }
// }
void BubbleSort(int A[], int n) {
for(int i = 0;i < n-1;i++) {// 控制遍历的趟数
bool flag = false;
for(int j = 0;j < n-1;j++) {
if(A[j] > A[j+1]) { // 若为逆序,则交换
swap(A[j], A[j+1]);
flag = true;
}
}
if(flag == false) {// 本趟遍历没有发生交换,则说明表已经有序
return ;
}
}
}
void PrintArray(int A[], int n) {
for(int i = 0;i < n;i++) {
cout << A[i] << " ";
}
cout << endl;
}
int main() {
int arr[] = {100,6,5,3,2,1,99};
cout << "排序前:";
PrintArray(arr, 7);
BubbleSort(arr, 7);
cout << "排序后:";
PrintArray(arr, 7);
return 0;
}
注:以上图片来自B站王道数据结构截图