排序算法C++ && Python实现---直接插入排序

  1. 算法思想:
    直接插入排序的思想是:从待排序序列的第一个元素开始,依次比较相邻的两个元素,若后者小于前者(从小到大排序),则将后者作为哨兵,插入到序列中的正确位置。
    那么问题来了,怎么样才能将哨兵插入到正确的位置呢?这就是下面需要着重解决的问题。
    考虑,第i个元素作为哨兵,则意味着data[i-1]>data[i]的,且经过前面的排序后,前面的0~i-1个元素已经从小到大排好序了。那么,可以从第i-1个元素开始,向序列首部方向,依次比较与哨兵的大小,若大于哨兵,则向后移动一个单位,如小于哨兵,则将哨兵插入到此元素之后。
  2. C++实现(IDE: VS2012)
//打印排序结果函数
void Print(int a[],int n,int i=0)
{
    //cout<<i<<endl;
    cout<<"排序后的结果为:"<<endl;
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
//插入排序---直接插入排序,时间复杂度O(N^2)
void ZhiJieChaRuPaiXu(int a[8],int n)  //函数输入参数---数组a中存有待排序数据,n为数据个数
{
    for(int i=1;i<n;i++)               //待排序数组长度为n
    {
        if(a[i]<a[i-1]){
            int j=i-1;       
            int x=a[i];                //复制哨兵,将参考值保存
            while(x<a[j])              //判断坐标i之前的每个数值,若大于参考值
            {
                a[j+1]=a[j];           //将值向前移动
                j--;                   //坐标值前移
            }
            a[j+1]=x;                  //若第j个数据不再小于参考值,则将参考值插入到j+1位置
        }
        Print(a,n,i);
    }
}

3 Python实现(Python 2.7)

'''输出排序结果函数'''
def Print(ddata):
    n=len(ddata)
    for i in range(n):
        print ddata[i],    #其中","为了不让其输出默认的换行符
'''插入排序---直接插入排序'''
def ZhiJieChaRuPaiXu(data):
    n=len(data)
    for i in range(1,n):
        if(data[i]<data[i-1]):
            ShaoBing=data[i]
            j=i-1
            while(ShaoBing<data[j]):      #每次移动一个数据
                data[j+1]=data[j]
                j=j-1
                if(j==-1):                #当j为-1时,表明ShaoBing为最小元素,
                    data[0]=ShaoBing
                    break
            data[j+1]=ShaoBing
    Print(data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值