冒泡排序法,再我自己学习过程中,看起来原理简单,但是仔细想想发现不太容易理解。我再这里写一些我自己的理解。
以下代码为冒泡排序法
int num[]={6,5,4,3,2,1};
int temp;
for (int i=1;i<num.length;i++){
for (int j=0;j<num.length;j++){
if (num[i]<=num[j]){
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
}
解读
- 首先我是声明了一个有6个有数字的一维数组。数组的数据很简单,是方便理解。
- 另外定义了一个int类型的temp变量,用来做之后两个位置数据交换的过度变量。
- 然后用了两个for循环,嵌套关系 ,再一个for循环里面再添加一个for循环。外层循环定位数组的一个位置,进入到内层循环用该位置的数据依次与其他位置数据进行比较,内层比较完之后,外层循环再往后定位一个位置,再进入内存循环重复之前操作,直到排序完成。
例子分析
该例子是要把数组从小到大依次排列
1、外层循环第一次定位数组的第二个位置数据,然后进入到内层循环用第二个位置的数据依次与其他位置的数据进行比较。
2、只要第二个位置的数据与其他位置数据相比较,且小于其他位置的数据,就交换两个位置的数据(可以确保第二个位置的数据是该数组最大的)。
3、外层循环定为是第二个数据,那么内层循环完成一次,就可以将前两个位置的数据排好序,并且排好序的序列最右段一定是该数组最大的一个数据。
外层循环往后定位下一个位置的数据,重复上述三步操作。
原始数组:6,5,4,3,2,1
外层定位第2个位置,内层循环执行完一个周期:5,6,4,3,2,1
外层定位第3个位置,内层循环执行完一个周期:4,5,6,3,2,1
外层定位第4个位置,内层循环执行完一个周期:3,4,5,6,2,1
外层定位第5个位置,内层循环执行完一个周期:2,3,4,5,6,1
外层定位第6个位置,内层循环执行完一个周期:1,2,3,4,5,6
直白的讲出来就是,先找出最大的数据,放在序列右边,然后每次加一个数据进来,在这个序列里找到合适位置插入进去。直到全部数据都插入到这个序列,最大的数据到了数组的最右边位置,整个排序完成。
当初自己学习的时候,很是困惑,这里写这么多,不知道能不能看懂。第一次写博客。