这是插入排序吗?

时间:2011-06-22 12:04:32

标签: c++ algorithm insertion-sort

我正在阅读“算法简介”并阅读插入排序。我试图在没有先阅读解决方案的情况下自己实施。

这是我的解决方案,这是插入排序吗?

#include <iostream>

using namespace std;

int main()
{
    // initialize an unsorted array
    int a[] = {5,6,4,7,3,8,2,9,0,1};

    // define variables
    int i,j,tmp;

    for (int j=1; j<10; ++j)
    {
        for (int i=0;i<j;++i)
        {
            if (a[j] < a[i])
            {
                tmp = a[j];
                a[j] = a[i];
                a[i] = tmp;
            }
        }

    }

    for (i=0;i<10;++i)
    {
        cout << a[i] << endl;
    }

    return 0;
}

好的,我已经读过了,并且理解为什么它不是插入排序...这要好得多。

   #include <iostream>

    using namespace std;

    int main()
    {
        // initialize an unsorted array
        int a[] = {5,6,4,7,3,8,2,9,0,1};

        // define variables
        int i,j,key,c;

        for (int j=1; j<10; ++j)
        {
            key = a[j];
            i = j - 1;

            while(i>=0 && a[i] > key)
            {
                a[i+1] = a[i];
                i = i - 1;
            }
            a[i+1] 

= key;
        ++c;
    }

    for (i=0;i<10;++i)
    {
        cout << a[i] << endl;
    }

    cout << endl << c << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:7)

您的解决方案似乎是冒泡排序,而不是插入排序。

答案 1 :(得分:1)

看起来像插入排序给我。您正在一次创建一个排序数组(a[0...j])。

您的插入异常且效率低下。要将a[j]插入a[0...j],您无需将其与每个元素进行比较。