冒泡排序:
思路:每一趟都从开始位置从左向右遍历,通过两两比较,如果左边值大于右边值,则交换(换句话说:每趟都可以将排序序列中最大值通过交换的方式,蠕动到最后面)


此时第一趟就把最大的数据已经放到的最后,所以此时最后一个数据就是有序的




代码实现:
cs
//冒泡排序
void Bubble_Sort(int arr[], int len) {
for (int i = 0;i < len - 1;i++) {//控制的是趟数
for (int j = 0;j < len - i - 1;j++) {//控制的是这一趟中对于待排序序列的从左向右两两取值依次比较的过程
if (arr[j]>arr[j+1]) {//两两比较,如果左边值大于右边值,就交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
冒泡排序的优化:
标签:bool tag
在每一趟两两比较开始之前,默认置为true
在具体跑的过程中,如果真的出现左边值>右边值,则需要交换,并将tag赋为false;
一趟跑完之后发现tag还是true,则说明数据已经为完全有序了。
cs
//冒泡排序的优化
void Bubble_Sort2(int arr[], int len) {
for (int i = 0;i < len - 1;i++) {//控制的是趟数
bool tag = true;
for (int j = 0;j < len - i - 1;j++) {//控制的是这一趟中对于待排序序列的从左向右两两取值依次比较的过程
if (arr[j] > arr[j + 1]) {//两两比较,如果左边值大于右边值,就交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
tag = false;
}
}
if (tag)return;
}
}