排序算法之冒泡排序

来源:互联网 发布:淘宝客服自动分流不均 编辑:程序博客网 时间:2024/06/08 02:35

趁着重新学习c语言这个机会自己再来学习下排序算法


首先是冒泡排序,这些排序算法在优酷上有不错的生动视频看一下视频可以加深理解。


优酷地址:http://v.youku.com/v_show/id_XMTQwOTEyODU5Mg==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2


接下来说说我的理解。冒泡排序,可以想象成水中有很多小水泡,每一次通过两两交换,把底下最大的泡泡浮到水面


那么接下来怎么实现这个两个数的交换?


既然是交换,就得模拟两个可以交换的数,在所有的排序算法中都是用两层循环来解决;第一次循环的从0到N。排了一次,所以要把所有的数排就需要用到两层循环!!


两个for循环


好,那么每一层循环体是怎么实现我们想要的过程呢,这个就关键了。如果循环体是从第一个数开始,第一次循环自然是从0开始,第二层循环从第二个数开始也就是j=i+1;

比较相邻两个数,用 数组下标 j和j+1两个数进行比较


通过整理思路就可以把排序算法理出来了


不管你用啥语言来写,基本套路都是一样的,只是语法上不一样。百度百科上有关于这些经典算法的实现。不过看一篇记不住,看两篇记不住,最后还是得靠理解!!!


先来个c语言的吧:


void maopao( int *nNum,int count ){

int tmp=0;

for( int i=0;i<count;i++ ){

for(int j=0;j<count-i-1;j++){//经过一次排序之后已经排行的的剩余数为 count-i 次

if( nNum[j]>nNum[j+1] ){//如果在本次排序中相邻交换

//交换两个数

tmp = nNum[j];

nNum[j] = nNum[j+1];

nNum[j+1] = tmp;

}

}

}

}