zoukankan      html  css  js  c++  java
  • 最简单排序——冒泡排序

    刚开始学习冒泡排序的时候老师是这样介绍的。

    冒泡排序:遍历要排序的元素列,依次比较两个相邻的元素,如果他们顺序错误,则交换。

    算法原理(升序排列):比较第一个和第二个元素,如果第一个比第二个大则交换他们。

               对每一个元素都做同样的操作,从第一对到最后一对。这样就可以把最大的元素放到了最后。

               再重复以上的操作,除了最后一个,这样就找到了剩余的最大元素,放到倒数第二位。

               继续循环,直到没有元素需要比较。

    下面是代码的实现:

    template<typename T>
    
    void bubble_sort(T arr[],int len)
    {
        int i,j;
        T tmp;
        for(i=0;i<len-1;i++)        //需要循环的次数  2 4 6 3 7    n个元素循环n-1次
            for(j=0;j<len-i-1;j++)  //每次比较剩余的元素即可  所以 j<len-1-i;
                if(arr[j]>arr[j+1])
                {
                    tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
    }
    

    这里需要说一下  template<typename T>    这是个模板,因为我们不确定在实际中要比较的数据类型,所以我们用这种方式。C++中的只是。

    我们设想一下   如果我们要比较的元素本来就是有序的,上述的写法是不是i的循环是不是浪费了。

    1 2 3 4 5 6 7 8 9 10    上面的写法for循环会执行9次

    所有我们需要来改进一下 设置一个标示符可以解决这个问题。

    void bubble_sort(T arr[],int len)
    {
        int i,j;
        T tmp;
        int flag = 1;
        for(i=0;i<len-1&&flag;i++)     如果序列有序则不进入循环
            for(j=0,flag=0;j<len-i-1;j++)
                if(arr[j]>arr[j+1])
                {
                    tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                    flag = 1;
                }
    }
    

      

    最后我们用主函数来测试我们的算法

    int main()
    {
        int arr[] = {61,17,29,22,34,60,72,21,50,1,62};
        int len = (int) sizeof(arr) / sizeof(*arr);
        bubble_sort(arr,len);
        int i;
        for(i=0;i<len;i++)
            cout << arr[i] << ' ';
        cout << endl;
    
    
        float arrf[] = {17.5,19.1,0.6,1.9,10.5,12.4,3.8,19.7,1.5,25.4,28.6,4.4,23.8};
        len = (int)sizeof(arrf) / sizeof(*arrf);
        bubble_sort(arrf,len);
        for(i=0;i<len;i++)
            cout << arrf[i] << ' ';
        cout << endl;
        return 0;
    
    }
    

      

               

  • 相关阅读:
    mybatis四大接口之 ParameterHandler
    mybatis四大接口之 Executor
    网络协议
    4、Android UI测试
    3、Android构建仪表测试
    【翻译】Ext JS 6.2 早期访问版本发布
    2、Android构建本地单元测试
    1、Android测试入门
    安卓中的事件分发机制源码解析
    安卓IPC机制之Binder详解
  • 原文地址:https://www.cnblogs.com/wzqstudy/p/9980129.html
Copyright © 2011-2022 走看看