先易后难,层层递进的思想
定义——
冒泡排序是一种最简单的交换排序方法,通过两两比较相邻记录的关键字,如果为逆序,则进行交换,从而使关键字小的记录如起泡一般逐渐往上“漂浮”,或者使关键字大的记录如石块一样逐渐向下“坠落”。
P:一眼标准的定义,一脑标准的懵逼,用自己的话说就是几句,两两作一组比较为判定,直到排序完,可升序也可降序。
拿升序举例
——首先要知道,排序肯定不止一趟——
第一趟形象地表达如下图
不知道哪个MAX,所以暂定首个元素是MAX(这句话很关键,是理解第二趟排序的前提)
即:10个数要比较10-1次,J个数要比较J-1次,
每一次就用 if(a[ j ]>a[ j+1 ])
进行交换(基础,最经常用的数值交换方式,升序降序就把形式换一下。)。
所以一趟共进行9次循环(次数是动态变化中),这样一来,MAX就放到最后 了(唯一能确定)。
这样,第一趟排序就完成了
————————————分界线————————————————
第二趟形象地表达如下图
因为我们把首元素看成MAX(不论首元素是否为MAX,这样推断方便计算。)
正确推断如下:
这个假设前提很重要,是贯穿整个冒泡逻辑思想的“一线牵”,可自行推断的嘛。
即:9个数要比较9-1次,每一次就用 if(a[ j ]>a[ j+1 ])
进行交换(基础),所以一趟共进行8次循环(次数是动态变化中),这样一来,MAX就放到最后了(唯一能确定)。
综上所述,规律很明显
第一趟——比较9次
- a[ 1 ] > a[ 2 ]
- a[ 2 ] > a[ 3 ]
- a[ 4 ] > a[ 5 ]
- a[ 6 ] > a[ 7 ]
…
9. a[ 9 ] > a[ 10 ](“最大与最大”相比较)
第二趟——比较8次
- a[ 1 ] > a[ 2 ]
- a[ 2 ] > a[ 3 ]
- a[ 4 ] > a[ 5 ]
…
8. a[ 8] > a[ 9 ] (“最大与最大”相比较)
第三趟——比较7次
- a[ 1 ] > a[ 2 ]
- a[ 2 ] > a[ 3 ]
- a[ 4 ] > a[ 5 ]
…
7. a[ 7] > a[ 8 ] (“最大与最大”相比较)
最后一趟(第九趟)——比较1次- a[ 1 ] > a[ 2 ](相比较出最小)
算法思想
两两比较,大在前/小在后,逐次递减比较数
for(i=1;i<10;i++)
for(j=1;j<11-i;j++)
if(a[j]>a[j+1])
第一行代码作用:总共要进行几次排序的次数(要理解,是由排序的数字个数产生)
正确理解第二行代码,作用:限定“俩俩为一组”比较的次数(每一趟排序,每两个数字要比较的次数)
第三行代码:交换数值(不是核心,是常用基础)