现在的位置: 首页 > 综合 > 正文

插入排序

2018年09月17日 ⁄ 综合 ⁄ 共 2552字 ⁄ 字号 评论关闭

一个好脑袋比不过一杆破笔头。插入排序,读完严蔚敏老师的教材,根据自己的理解写的。木有看严蔚敏老师的代码实现。正所谓,看别人的算法代码,比自己写起来要难的多。特此声明,代码是根据自己对插入排序的理解实现的,不一定正确,如有问题,可留言告知,3Q。

 

/*
* 插入排序,严蔚敏老师教材读后感。
* 1:生成一个已完成排序的数组。
* 2:将待排序的数据插入到已完成排序的数组中,并保证已完成排序的数组仍旧是已排序。
* 思路可以参考函数 xf_InsertSortIncrease_YWM 的实现。
*/

#include <iostream>
using namespace std;

void xf_Swap(int& x,int& y)
{
    int temp = x;
    x = y;
    y = temp;
}

/*
* 严蔚敏老师的思路,先构建一个已经排序的数组,然后将待排序的元素插入到已排序数组的正确位置,保证加入新元素的数组仍旧满足已排序。
*/
void xf_InsertSortIncrease_YWM(int ary[],int aryLen)
{
    //已排序的数组最后一个元素的下标
    int lastElementIndexOfSortAry = 1;
   
    //构建一个以数组下标为0,1的元素组成的已排序数组
    if( ary[0]>ary[lastElementIndexOfSortAry])
    {
        xf_Swap(ary[0],ary[lastElementIndexOfSortAry]);
    }
   
    //开始插入排序i,就是将已排序数组ary[0,1]之后的元素插入到ary[0,1]中来,保证ary[0,1,2]仍旧为已排序。直到ary[0,1...9,10]为已排序。
    for( int i=lastElementIndexOfSortAry+1;i<aryLen;++i)
    {
        //将i与已排序数组中的元素比较,从后往前比较
        int indexCurrentOper = i;
        for( int j=lastElementIndexOfSortAry;j>=0;--j)
        {
            if(ary[indexCurrentOper] < ary[j])
            {  
                xf_Swap(ary[indexCurrentOper],ary[j]);
                indexCurrentOper = j;
            }
        }
        lastElementIndexOfSortAry = i;
    }
}

void xf_InsertSortIncrease(int ary[],int aryLen)
{
    //已排序的数组最后一个元素的下标,默认用数组第一个元素初始化为已排序的数组。即已排序的数组初始化时只有一个元素。
    int lastElementIndexOfSortAry = 0;
       
    //开始插入排序i
    for( int i=lastElementIndexOfSortAry+1;i<aryLen;++i)
    {
        //将i与已排序数组中的元素比较,从后往前比较
        int indexCurrentOper = i;
        for( int j=lastElementIndexOfSortAry;j>=0;--j)
        {
            if(ary[indexCurrentOper] < ary[j])
            {  
                xf_Swap(ary[indexCurrentOper],ary[j]);
                indexCurrentOper = j;
            }
        }
        lastElementIndexOfSortAry = i;
    }
}

void xf_InsertSortDecrease(int ary[],int aryLen)
{
    //已排序的数组最后一个元素的下标,默认用数组第一个元素初始化为已排序的数组。即已排序的数组初始化时只有一个元素。
    int lastElementIndexOfSortAry = 0;
       
    //开始插入排序i
    for( int i=lastElementIndexOfSortAry+1;i<aryLen;++i)
    {
        //将i与已排序数组中的元素比较,从后往前比较
        int indexCurrentOper = i;
        for( int j=lastElementIndexOfSortAry;j>=0;--j)
        {
            if(ary[indexCurrentOper] > ary[j])
            {  
                xf_Swap(ary[indexCurrentOper],ary[j]);
                indexCurrentOper = j;
            }
        }
        lastElementIndexOfSortAry = i;
    }
}

int main(int argc,char** argv)
{
    int ary[10] = {38,49,65,97,44,27,18,66,55,99};
    cout << "befor insert sort ,array number is:" << endl;
    for(int i=0;i<10;++i)
    {
        cout << ary[i] << endl;
    }
    //xf_InsertSortIncrease(ary,10);
    xf_InsertSortDecrease(ary,10);
    cout << "after insert sort ,array number is:" << endl;
    for( int i=0;i<10;++i)
    {
        cout << ary[i] << endl;
    }
    return 0;
}

抱歉!评论已关闭.