#include <iostream>
#include <algorithm> // 包含 swap 函数的头文件
using namespace std;
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(arr[j], arr[j+1]);
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
cout<<"Sorted array: \n";
for (int i=0; i < n; i++) {
cout<<arr[i]<<" ";
}
return 0;
}
核心代码:
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(arr[j], arr[j+1]);
}
}
}
}
排序算法中,有两层for循环
外层内循环表示要进行排序操作的轮数,每一轮排好一个数
i<n-1
,表示n个数只需要排n-1次即可,因为n-1个数排好了,剩下一个最大或最小的那个自然就排好了
内层循环表示的是每一轮中,比较相邻数据的大小
n-1-i
中,n表示数据的个数,-i表示截止到上一轮中已经排好了的元素的个数,-1防止数组越界,因为比较的时候是arr[j]
和arr[j+1]
进行比较
(1)两两比较相邻元素A(I)和A(I+1)(I=1,2,…N-1),如果A(I)>A(I+1),则交换A(I)和A(I+1)的位置;
(2)对剩下的N-1个元素,再两两进行比较,按同样规则交换它们的位置,经过N-2次比较,将次最大值交换到A(N-1)的位置;
(3)如法炮制,经过N-1趟的“冒泡处理”,每趟进行N-i次的比较,全部数列有序。