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

    冒泡排序

    交换排序

    1. 冒泡排序
    2. 快速排序

    基于“交换“的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置

    定义

    从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换他们,直到序列比较完,称这样过程为”一趟“冒泡排序

    操作示意

    两个两个比较,让最小的到前面去。

    最小的两个已经到前面去了。

    如果两个相同,不换位置,为了稳定性。

    第五趟结束后,整体已经有序了。。

    代码

    //交换
    void swap(int &a,int &b){
        int temp = a;
        a = b;
        b = temp;
    }
    //冒泡排序
    void BubbleSort(int A[],int n){
        for(int i=0;i<n-1;i++){
            bool flag = false;	//表示本趟冒泡是否发生交换的标志
            for(int j=n-1;j>i;j--)		//一趟冒泡过程
                if(A[j-1]>A[j]){		//若为逆序
                    swap(A[j-1],A[j]);	//交换
                    flag = true;
                }
            if(flag == false)
                return;		 //本趟遍历后没有发生交换,说明表已经有序
        }
    }
    

    算法性能分析

    空间复杂度:O(1)

    最好情况(有序):12346578,比较次数=n-1;交换次数=0;最好时间复杂度=O(n)

    最坏情况(逆序):87654321,比较次数=n(n-1)/2=交换次数,最坏时间复杂度=O(n^2)

    平均时间复杂度=O(n^2)

    注意:每次交换都需要移动元素3次

    稳定性:稳定

    冒泡排序是否适用于链表?(自己实现)

    知识回顾

  • 相关阅读:
    组合模式扩展,有选择的递归
    SQL分页查询【转】
    facade外观模式
    C#:几种数据库的大数据批量插入 faib
    装饰模式的扩展
    yeild之我理解
    数据库操作 sqlserver查询存储过程+分页
    SQL Server 索引结构及其使用(二)[转]
    SQL索引使用初步,(转)
    解决多集成,多子类,扩展等 装饰模式
  • 原文地址:https://www.cnblogs.com/jev-0987/p/13322150.html
Copyright © 2011-2022 走看看