zoukankan      html  css  js  c++  java
  • 交换排序------冒泡排序

    泡排序是一种极其简单的排序算法,也是我所学的第一个排序算法。它重复地走访过要排序的元素,一次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。

      冒泡排序算法的运作如下:

    1. 比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。
    2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
    3. 针对所有的元素重复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

      时间复杂度  
         最好情况下:
    正序有序,则只需要比较n次。故,为O(n)  
         最坏情况下:  逆序有序,则需要比较(n-1)+(n-2)+……+1,故,为O(N*N)

      稳定性  

          排序过程中只交换相邻两个元素的位置。因此,当两个数相等时,是没必要交换两个数的位置的。所以,它们的相对位置并没有改变,冒泡排序算法是稳定的

     

      由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。冒泡排序的代码如下:

    冒泡排序的改进:鸡尾酒排序

     鸡尾酒排序,也叫定向冒泡排序,是冒泡排序的一种改进。此算法与冒泡排序的不同处在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能。

      鸡尾酒排序的代码如下:

    void BubbleSort(RecType R[] , int n)
    {
        int left=0,right=n-1;   //边界初始化
        int i,j;
        RecType temp;
        while(left<right)
        {
            for(i=left;i<right;i++)                         // 前半轮,将最大元素放到后面
               if(R[i].key>R[i+1].key)
                {
                     temp=R[i];
                     R[i]=R[i+1];
                     R[i+1]=temp;
               }
              right--;
    
             for(i=right;i>left;i--)                         // 后半轮,将最小元素放到前面
               if(R[i].key<R[i-1].key)
                {
                     temp=R[i];
                     R[i]=R[i-1];
                     R[i-1]=temp;
               }
            left++;
         }
    }
  • 相关阅读:
    Java总结(三)之String、StringBuffer、StringBuilder区别
    Java总结(二)之字符串常用操作
    Java总结(一)之四类八种数据类型
    schema.xml的配置
    MySQL server has gone away问题得解决方案
    如何在Java中将Excel转化为XML格式文件
    FileItemFactory 接口的介绍
    小练习2
    小练习
    while else 练习题
  • 原文地址:https://www.cnblogs.com/wujing-hubei/p/6128836.html
Copyright © 2011-2022 走看看