冒泡排序,系列排序算法第一弹
咱们这个教程提供视频教程与文字教程,大家能看懂哪个看哪个。视频的代码以及用图代码都在下方文字里。
25:13
0 / 0
继续观看
冒泡排序,系列排序算法第一弹
冒泡排序:冒泡一词是对成序过程的一个生动的比喻。
逻辑:遍历数据,相邻的两个数据进行比较并交换。
前一个比后一个小,进行交换数据。从大到小排序。
前一个比后一个大,进行交换数据。从小到大排序。
从头到尾遍历一次,就是一次冒泡,有多少数据,就遍历多少次,最终所有数据就自然成序了。
图示过程如下:
文字描述详细过程:
第一次遍历就将最小的依次交换到倒数第一的位置
第二次遍历将第二小的依次交换到倒数第二的位置
第三次遍历将第三小的依次交换到倒数第三的位置
第n次遍历将第n小的依次交换到倒数第n的位置
代码如下:
#include <stdio.h>
int main(void)
{
int arr[7] = { 6,1,1,2,8,3,7 };
for (int i = 1; i <= 7 - 1; i++)
{
for (int j = 0; j < 7 - i; j++) // 6 5 4 3 2 1
{
if (arr[j] < arr[j + 1])
{
//交换
int temp = arr[j]; //以下三行是交换算法代码
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 7; i++) //输出排序后的数组
{
printf(" %d ", arr[i]);
}
return 0;
}
代码解析:
1、外层循环的作用是控制冒泡排序的次数,比如有10个数据,我们仅需要排序9次即可,因为冒泡排序最后一个数自然程序。为什么?比如4个数从小到大排序,第一次取出最大的挪到最后一个位置,第二次取出第二大的挪到倒数第二个位置,第三次取出第三大的放在倒数第三个位置,第四次,也就是最后一次肯定剩下个最小的,并且只在它所在的位置上,不用动了。
所以咱们的i是从1开始,到6结束,总共6次循环。
2、内层循环是冒泡的核心算法。循环控制变量为 j < 7-i ,因为比较的是j与j+1,保证j+1 < 7不越界, 所以7 - i,因为i是从1开始的。
其次,i为自增变量。也就是第一次冒泡是对前7个数据冒泡排序(7个数据只需要比较6次),第二次是前6个数据冒泡排序,因为第7个数据排序好了,就不用再管了。第三次是对前5个数据冒泡排序。依次下去。所以内层循环的次数是7-i。也就是j的最大次数依次为6次,5次,4次,3次,2次,1次。