bubblesort的改进

#include <iostream>
using namespace std;
bool bubble2(int *a,int lo, int hi){
    bool sorted = true;
    while (++lo<hi)
    if (a[lo - 1]>a[lo]){
        sorted = false;
        swap(a[lo - 1], a[lo]);
    }
    return sorted;
}
void bubblesort2(int *a,int lo, int hi){
    while (!bubble2(a,lo,hi--));
}
void bubblesort1(int *a, int lo, int hi){
    for (int i = lo; i < hi-1;i++)
    for (int j = lo; j < hi - 1 - i; j++){
        if (a[j]>a[j + 1])
            swap(a[j], a[j + 1]);
    }
}
int  bubble3(int *a, int lo, int hi){
    int sorted = lo;
    while (++lo<hi)
    if (a[lo - 1]>a[lo]){
        sorted = lo;
        swap(a[lo - 1], a[lo]);
    }
    return sorted;
}
void bubblesort3(int *a, int lo, int hi){
    while (lo<(hi=bubble3(a,lo,hi)));
}
int main(){
    int a[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
    bubblesort1(a, 0, 10);//未优化的冒泡算法
    //bubblesort2(a, 0, 10);//如果循环至某一行,如果无序对为0,则可以跳过无效循环
    //bubblesort3(a, 0, 10);//如果循环至某一行,某前缀的后缀皆有序则可以只排序前缀,从而减少循环次数
    for (int i = 0; i < 10; i++)
        cout << a[i] << endl;
    return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36813793/article/details/79977335
个人分类: DSA
上一篇binSearch的三种形式
下一篇mergesort(递归分割+有序向量的排序)
想对作者说点什么? 我来说一句

改进的冒泡算法(BubbleSort

2008年10月17日 449KB 下载

BubbleSort

2012年10月21日 986B 下载

BubbleSort(正序)

2018年05月06日 687B 下载

冒泡排序 BubbleSort

2014年02月08日 25KB 下载

各种排序的实现

2014年12月09日 4KB 下载

内部排序算法比较

2018年01月14日 10KB 下载

贪心算法网友博客改进

2015年06月26日 3KB 下载

改进的中值滤波MATLAB程序

2011年09月19日 669B 下载

一种改进的Canny边缘检测算法

2014年03月22日 707KB 下载

遗传算法的3种改进方法和分析

2014年04月09日 329KB 下载

没有更多推荐了,返回首页

关闭
关闭