398 字
2 分钟
冒泡排序
冒泡排序(Bubble sort)
从左到右,两两比较,左边比右边大就交换,反之不变,直到遍历到最后一个,最后一个肯定是数组中最大的元素,然后开始下一次循环,直到外层循环遍历结束整个数组排序完成。
C++代码如下:
#include<stdio.h>#include<iostream>using namespace std;
int main() { int n = 5; int a[5] = {2, 5, 3, 4, 1}; for (int j = n - 1; j >= 0; --j) {//双层循环遍历 for (int i = 0; i < j; ++i) { if (a[i] > a[i + 1]) { swap(a[i], a[i + 1]); } } } for (int i = 0; i < n; ++i) {//输出排序后的数组 cout << a[i] << " "; } return 0;}
冒泡排序优化
当数组在整个遍历过程中没有发生交换,说明待排序数组已经是有序的了,此时可以直接用break结束排序过程。
C++代码如下:
#include<stdio.h>#include<iostream>using namespace std;
int main() { int n = 5; int a[5] = {2, 5, 3, 4, 1}; bool flag = true;//默认设定代表数组已经有序 for (int j = n - 1; j >= 0; --j) {//双层循环遍历 flag = true;//每次开始外层循环都要把flag重新赋值一次 for (int i = 0; i < j; ++i) { if (a[i] > a[i + 1]) { swap(a[i], a[i + 1]); flag = false;//发生交换,证明数组不是有序的 } } if (flag == true) {//证明没有发生交换,则数组已经有序,不必再循环了 break; } } for (int i = 0; i < n; ++i) {//输出排序后的数组 cout << a[i] << " "; } return 0;}