2021/8/20 三种代价为O(n^2)的排序算法 C++

本文介绍了三种基础排序算法:插入排序、冒泡排序和选择排序。尽管它们在处理大量数据时效率较低,但在特定情况下可能是最优解。插入排序在最好情况下的时间复杂度为O(n),冒泡排序和选择排序的时间复杂度均为O(n^2)。文章通过模板函数展示了每种排序算法的实现,并总结了它们的特点。
摘要由CSDN通过智能技术生成

前言:

先简单介绍三种简单排序算法。虽然这些算法简单易懂,而且易于实现,但对于待排序的记录数较多的排序算法,它们速度就非常慢了,可在某些特殊情况下,这些最简单的算法可能是最好的算法。/font>


插入排序:

最佳情况插入排序的时间代价是O(n),最差情况插入排序的时间代价是O(n^2)
template <typename E, templete Comp>
void insort(E A[], int n){     //Insertion Sort
    for(int i=1;i<n;i++)       //Insert i'th record
        for(int j=i;(j>0) && (Comp::prior(A[j],a[j-1]));j--)
            swap(A,j,j-1);
}

冒泡排序:

最佳、平均、最差情况冒泡排序的时间代价都是O(n^2)

template <typename E, templete Comp>
void bubsort(E A[], int n){     //Bubble Sort
    for(int i=0;i<n-1;i++)       //Bubble up i'th record
        for(int j=n-1;j>i;j--)
            if(Comp::prior(A[j],A[j-1]))
                swap(A,j,j-1);
}

选择排序:

template <typename E, templete Comp>
void selsort(E A[], int n){     //Selection Sort
    for(int i=0;i<n-1;i++){     //Select i'th record
        int lowindex = i;       //Remember its index
        for(int j=n-1;j>i;j--)  //Find the least value
            if(Comp::prior(A[j],A[lowindex]))
                lowindex = j;   //Put it in place
        swap(A,j,lowindex);
    }
}

总结:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值