vlambda博客
学习文章列表

冒泡排序,系列排序算法第一弹

       咱们这个教程提供视频教程与文字教程,大家能看懂哪个看哪个。视频的代码以及用图代码都在下方文字里。

Replay Share Like
时长

25:13

0 / 0

Original
冒泡排序,系列排序算法第一弹
C3程序猿
进度百分之0
进度00:00
时长25:13
时长25:13
全屏

继续观看

冒泡排序,系列排序算法第一弹


冒泡排序:冒泡一词是对成序过程的一个生动的比喻。

逻辑:遍历数据,相邻的两个数据进行比较并交换。

 前一个比后一个小,进行交换数据。从大到小排序。

 前一个比后一个大,进行交换数据。从小到大排序。

    从头到尾遍历一次,就是一次冒泡,有多少数据,就遍历多少次,最终所有数据就自然成序了。


图示过程如下:

文字描述详细过程:

第一次遍历就将最小的依次交换到倒数第一的位置

第二次遍历将第二小的依次交换到倒数第二的位置

第三次遍历将第三小的依次交换到倒数第三的位置

第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次。