总结八大排序算法的基本思想与代码实现

    在写这篇文章之前,先点一根红烛默哀我腾讯挂掉的笔试/(ㄒoㄒ)/~~小女子尽力了,真的真的尽力了/(ㄒoㄒ)/~~奈何缘浅,就此别过吧ヾ( ̄▽ ̄)Bye~Bye~

在这里先提前说明一下,在下面讲解中,会涉及到时间复杂度和空间复杂度的计算,那么先来说一下怎样计算时间复杂度和空间复杂度?

按照书上所说,时间复杂度的计算方法如下:

1.计算出基本操作的执行次数T(n);

2.计算出T(n)的数量级,令f(n)=T(n)的数量级;

3.用大O来表示时间复杂度,当n趋近于无穷大时,如果lim(T(n)/f(n))的值不等于0,则T(n)=O(f(n)),称为算法的时间复杂度。

吧啦吧啦吧啦~~~是不是很复杂的感觉,瞬间感到了深深的恶意吗?那我们简化一下,用学渣的思想去计算:

1.找到执行次数最多的语句;

2.计算语句中执行次数的数量级;

3.OK~那就是时间复杂度了,不要怀疑~~~

  言回正传啦,咳咳,说排序了。

排序分为内部排序和外部排序,我们接触最多的也就是内部排序,所谓内部就是数据记录在内存中,八大排序也就是典型的内部排序。

1.直接插入排序

基本思想:

   假设我们存在一个待排元素数组R[0...n-1],在排序过程中,我们将R分成两个子序区,R[0..i-1]称为有序区,R[1..n-1]称为无序区,然后我们再从无序区开头位置R[i]开始扫描,每一次在有序区中只增加一个元素到合适的位置。

C++代码:

void InsertSort(RecType R[],int n){
    int i,j;
    RecType temp;
    for(i=1;i<n;i++){
        temp = R[i];
        j=i-1;              //从右向左,在有序区中找到插入的位置
        while(j>=0 && temp.key<R[j].key){
            R[j+1]=R[j];        //将关键字大于R[i]的元素后移
            j--;
        }
        R[j+1]=temp;
    }
}
2.折半插入排序

基本思想:

   类似于直接插入,但是我们可以在有序区找插入位置的时候,采用折半查找法,再通过移动元素进行插入。我们可以把R[0..n-1]设为R[low..high],找到插入位置为R[high+1],再将R[high+1..i-1]中的元素后移一个位置,并置R[high+1]=R[i]。

C++代码:

void InsertSort(RecType R[],int n){
    int i,j,low,high,mid;
    RecType tmp;
    for(i=1;i<n;i++){
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值