我正在阅读“算法简介”并阅读插入排序。我试图在没有先阅读解决方案的情况下自己实施。
这是我的解决方案,这是插入排序吗?
#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;
}
答案 0 :(得分:7)
您的解决方案似乎是冒泡排序,而不是插入排序。
答案 1 :(得分:1)
看起来像插入排序给我。您正在一次创建一个排序数组(a[0...j]
)。
您的插入异常且效率低下。要将a[j]
插入a[0...j]
,您无需将其与每个元素进行比较。