码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--排序(上)--简单排序(冒泡,插入)

时间:2015-08-31 09:51:42      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

简单排序(冒泡,插入)

介绍两大类算法,一类是排序,一类是查找

前提:X是排序的算法 void X_sort( ElementType A[],int N) 。

N是正整数,只讨论基于比较的排序(< = >有定义)

只讨论内部排序(所有数据都可以导入内部空间)

稳定性:任意两个相等的数据,排序前后的相对位置不发生改变。

没有一种排序是任何情况下都表现最好的。

冒泡排序

第一次冒泡最大的泡泡一定在最下面。

void Bubble_sort(ElementType A[], int N){
    for(P=N-1;P>=0;P--){
        flag  = 0;            //这个标签可以判断一次循环里面有没有交换的
        for(i = 0 ; i< p ;i++){        //一趟冒泡
            if(A[i]<A[i+1]){
                swap(A[i],A[i+1]);
                flag = 1;    
            }
        }
        if(flag == 0)
            break;   //全程无交换,可以退出了。
    }
}

 

最好情况顺序 T = O(n)  

最坏情况逆序 T = O (n2)

A可以是数组 ,可以是链表。

插入排序

类似于扑克牌排序。

void Insertion_sort(ElementType A[], int N){
    for(P=1;P<N;P++){
        Tmp = A[P];    //摸下一张牌
        for(i = P ; i>0 && A[i-1]>Tmp  ;i--)        //一趟冒泡
            A[i] = A[i-1];  //移出空位
        A[i] = Tmp;      //新牌落位
    }
}

 

最好情况顺序 T = O(n)  

最坏情况逆序 T = O (n2)

时间复杂度下界

技术分享

定理:任意N个不同元素组成的序列平均具有N(N-1)/4个逆序对。

定理:任何仅以交换相邻逆序对来排序的算法,其平均时间复杂度是Ω(N2).

技术分享

 

数据结构--排序(上)--简单排序(冒泡,插入)

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4772174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!