数据结构【排序篇】

数据结构【排序篇】



前言

在这里插入图片描述

为什么突然想学算法了?

> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下竞争压力逐渐增大,无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个寒假巩固速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~

在这里插入图片描述


为什么选择码蹄集作为刷题软件?

码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。
.
在这里插入图片描述


目录

一、插入排序

#include<iostream>

using namespace std;

//直接插入排序
void InsertSort(int A[],int n){
   
    int i,j,temp;
    for(i=1;i<n;i++)                            //将各元素插入已排好序的序列中
        if(A[i]<A[i-1]){
                           //若A[i]关键字小于前驱
            temp=A[i];                          //用temp暂存A[i]
            for(j=i-1;j>=0 && A[j]>temp;--j)    //检查所有前面已排好序的元素
                A[j+1]=A[j];                    //所有大于temp的元素都向后挪位
            A[j+1]=temp;                        //复制到插入位置
        }
}

//直接插入排序(带哨兵)
void InsertSortS(int A[],int n){
   
    int i,j;
    for(i=2;i<=n;i++)                           //依次将A[2]~A[n]插入到前面已排序序列
        if(A[i]<A[i-1]){
                           //若A[i]关键码小于其前驱,将A[i]插入有序表
            A[0]=A[i];                          //复制为哨兵,A[0]不存放元素
            for(j=i-1;j>=0 && A[0]<A[j];--j)    //从后往前查找待插入位置
                A[j+1]=A[j];                    //向后挪位
            A[j+1]=A[0];                        //复制到插入位置
        }
}

//二者本质上都是做了一个临时变量,哨兵A[0]在其中充当temp的作用

//折半插入排序
void MidInsertSort(int A[],int n){
   
    int i,j,high,low,mid,temp;
    for(i=1;i<n;i++){
                              //依次将A[1]~A[n-1]插入前面的已排序序列
        temp=A[i];                              //将A[i]暂存到temp;
        low=0;high=i-1;                         //设置折半查找的范围
        while(low<=high){
                          //折半查找(默认递增有序)
            mid=(low+high)/2;                   //取中间点
            if(A[mid]>temp) high=mid-1;         //查找左半子表
            else low=mid+1;                     //查找右半子表
        }
        for(j=i-1;j>=high+1;--j)
            A[j+1]=A[j];                        //统一后移元素,空出插入位置
        A[high+1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ぃ灵彧が

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值