• 冒泡排序


    冒泡排序算法的基本思想是:

      假设待排表长为n,从后往前两两比较相邻元素的值,若为逆序,则交换他们,知道序列比较完。我们称它为一趟冒泡排序,结果将最小的元素交换到待排序列的第一个位置。下一趟冒泡时,前一趟确定的最小元素不再参与比较,待排序列减少一个元素,每趟的结果把序列中的最小元素放到了序列的最终位置上,……,这样最多n-1趟冒泡就能把所有元素排序好。

    代码如下:

     1 void BubbleSort(ElemType A[],int n)
     2 {
     3     int i,j;
     4     bool flag;//记录是否有交换
     5     ElemType temp;//临时元素
     6     for(i=0;i<n-1;i++)
     7     {
     8         flag=false;//初始化
     9         for(j=n-1;j>i;--j)
    10         {
    11             if(A[j].key<A[j-1].key)//判断
    12             {
    13                 temp = A[j];
    14                 A[j]=A[j-1];
    15                 A[j-1]=temp;
    16 
    17                 flag=true;
    18             }
    19         }//一趟冒泡结束
    20         if(flag==false)//在上一趟冒泡中没有交换发生,说明整个序列已经有序
    21             return;
    22     }
    23 }

    代码分析:

    插图

    如图,每一趟冒泡排序结束后,i向下移动一位,而j回溯到n-1;继续下一趟的冒泡,每次序列的规模减小1。最多,当j==i时候,退出,然而,为了不必要的比较,当某一趟冒泡排序后发现没有交换,则说明序列已经有序。

    性能分析:

    1、空间复杂度O(1),用到一个辅助空间进行交换。

    2、时间复杂度,最坏的情况O(n^2),即逆序的时候;最好的情况O(n),顺序的时候。

    稳定性:稳定

  • 相关阅读:
    使用greenDAO遇到的问题
    使用greenDAO生成DAO代码
    Spring中Bean的生命周期
    视频弹幕开源库
    最简MacOs10.8安装
    apache-virtual host
    带删除的EditText
    替换默认debug.keystore文件
    Intellij格式化java和xml
    【数据结构】之二叉树的java实现
  • 原文地址:https://www.cnblogs.com/houjun/p/4868551.html
Copyright © 2020-2023  润新知