先上图,看图比较容易理解:( 一次 冒泡步骤演示)
过程分析
每次进行一次冒泡排序。会得到一个数组中的极值(最大或最小),这里就拿最大值来说,顺序是从前往后:
1.首先第一个数组元素和第二个数组元素比较大小,假如第二个元素小于第一个元素,则交换两者位置,然后第二个元素和第三个元素比较交换,依次进行下去。知道倒数第二个元素和倒数第一个元素进行比较交换。(看演示图加深理解)
2.第二次冒泡和第一次开始一样,唯一不同的是最后结束是在倒数第三个元素和倒数第二个元素进行比较交换。因为最后一个数已经确定是数组中最大的,不需要参与比较了,所以每一次冒泡比较都只能找出数组未排序部分的最大值。
3.最后经过比较我们就可以将数组从小到大排列好
代码演示(C++)
#include <stdio.h>
#include <iostream>
using namespace std;
void bubbleSort(int arr[],int size) {
for(int i = 0; i < size -1 ;i++){ // 有n个元素就要进行n-1次冒泡
for(int j = 0;j<size -i- 1;j++ ){ // 每次从第一个元素开始比较
if(arr[j+1] < arr[j]){
int tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
}
void printArray(int arr[], int size) {
int i;
for (i = 0; i < size; i++) cout << arr[i] << " ";
cout << endl;
}
int main(){
int arr[] = {10, 7, 82, 9, 13, 5, 2, 34, 54, 3, 26, 6, 37, 6, 48, 11};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Prepare Sorted array: \n";
printArray(arr, n);
bubbleSort(arr, n);
cout << " Bubble Sorted array: \n";
printArray(arr, n);
return 0;
}
代码关键就在两个for循环