冒泡排序算法总结

其实算法的核心就是分而治之和减而治之 就是把问题的规模不断的减少和降低

==========================

这几天学习了一下冒泡排序算法,总结如下

1.最常见和效率最差的算法。

  这个算法的核心就是拿每一个值都和没有排序的值进行比较,时间复杂度是O(n^2) 无论最好和最坏

void bubble0(int *a){
int i;

        int j;

for(i=0; i<sizeof(a)/sizeof(a[0]); i++)

for(j=i+1;j<sizeof(a)/sizeof(a[0]);j++){

if(a[i]>a[j])

  swap(&a[i],&a[j]);

}

}

2.场景,一部分排序好了,一部分没有

  如果在排序的过程中发现后面的已经排序好了,这个时候是可以停止排序的。时间复杂度最好O(n^1.5),最坏O(n^2);

bool bubble(int *a,int lo ,int hi){

bool sorted = ture;//默认有序

  while(++lo < hi){
if(a[lo-1]> a[lo]){

swap(&a[lo-1],&a[lo]);

sorted = false;//存在逆序,所以为FALSE;

}

}

return sorted;

}

//调用

while(!bubble(a,lo,hi--));


3.场景:只有前面一小部分没有排序,后面大部分排序好了。时间复杂度最好O(n),最坏O(n^2)

             int  bubble(int *a,int lo,int hi){

int last = lo;

while(++lo < hi){

if(a[lo-1] > a[lo]){

last = lo;

swap(&a[lo-1],&a[lo]);

}

}


return last;

}


//调用

while(lo <(hi= bubble(a,lo,hi));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值