排序->插入排序

1.插入排序

1.排序思想

  插入排序的主要思想就是把每一个元素插入合适的位置,以升序来分析,首先分析前两个元素,如果data[0]大于data[1],交换他们的次序,这时,前两个元素已经是已经排好序的。考虑data[2]:

  如果data[2]小于data[0]和data[1],将data[1]和data[1]都挪动一个位置。data[0]放在位置1,data[1]放在位置2上,而data[2]放在位置0上。

  如果data[2]大于data[0]小于data[1],将data[2]与data[1]交换。

  如果data[2]大于data[0]和data[1],不操作。

  接着以同样的方式操作data[3],知道最后一个元素。

2.排序实现

C语言实现:  

void insert_sort(int data[],int n)
{
    int i=1;
    for(;i<n;i++)
    {
        int j = i;
        int temp = data[i];
        for(;j > 0 && temp < data[j-1];j--)
           data[j] = data[j-1];
        data[j] = temp;
    }
}
int main()
{
    int data[10] = {34,1,43,2,112,32,112,67,432,13};
    int len = sizeof(data)/sizeof(int);
    insert_sort(data,len);
    for(int i=0;i<len;i++)
        printf("%d,",data[i]);
    printf("\n");
    return 0;
}

C++实现:  

template<class T,class Compare>
void insert_sort(vector<T> &vec,Compare com)
{
    for(int i=1,j;i<vec.size();i++)
    {
        T temp = vec[i];
        for(j=i;j>0 && com(temp,vec[j-1]);j--)
            vec[j] = vec[j-1];
        vec[j] = temp;
    }
}
int main()
{
    int _data[10] = {34,1,43,2,112,32,112,67,432,13};
    int len = sizeof(_data)/sizeof(int);
    std::vector<int> data;
    for(int i=0;i<len;i++)
        data.push_back(_data[i]);
    insert_sort(data,std::less<int>);
    for(int i=0;i<data.size();i++)
        cout << data.at(i) << ends;
    cout << endl;
    return 0;
}

3.时空间复杂度分析

时间复杂度:O(n2)

空间复杂度:S(1)

插入排序为稳定排序 

 

posted @ 2017-03-17 21:34  是召不是昭  阅读(147)  评论(0编辑  收藏  举报