冒泡的意思就是一次循环中依次比较相邻位置的数,满足则交换。
第一个for代表次数,第二个for来真正的两两比较。
冒泡的关键在于循环条件的次数确定,先看第一个for循环是length-1,
比如5个数 5 3 1 2 0,那么看第一次比较后变成3 1 2 0 5 第二次变成
1 20 3 5 第三次变成 1 0 2 3 5 第四次变成 0 1 2 3 5 最后一次不需要比较了,肯定最小
所以是length-1次了
然后看第二个循环就是用来俩俩比较的 比如5个数 5 3 1 2 0,有这样的比较(先认为最多需要比较多少次,
忽略中间遇到的不需要比较的),那么俩俩比较最多需要4次((5,3) (3,1) (1,2) (2,0)先忽略交换哈),第二次循环变成4个数俩俩比较 需要3次,也就是说一个数冒泡上去了,那么我们就不需要理她了,只关心剩下的数的比较即length-1-i。当然写length-1也可以,但是就多了很多没用的循环。
#include <stdio.h>
//=====================
void swap(int &i, int &j) {//交换俩数
int temp = i;
i = j;
j = temp ;
return ;
}
//======================================
void BubbleSort(int *a, int len ) {
int i, j;
for(i = 0; i < len - 1; i++) {
for(j = 0; j < len -i -1 ; j++) {
if(a[j] > a[j+1])
swap(a[j], a[j+1]);
}//for
}//for
}//BubbleSort
//=======================================
int main() {
int array[] = {6,8,3,9,5,0,1,4,2,7};
// int array1[] = {6,8,3,9,5};
BubbleSort(array,10);
for(int i = 0; i < 10; i++) {
printf("%d ",array[i]);
}
return 0;
}