#include<iostream>
using namespace std;
int main(void)
{
int a[10] = { 10,48,8,7,6,5,4,85,2,1 };
int sample;//提取的样本
int index;//索引
for (int i = 0; i < 10; i++)
{
sample = a[i];//从数列中一个个往后采样
index = i;//index为当前采样的序列号
for (int j = 0; j < index; j++)//将前面sample与排过序的a[0]到a[index-1]数据进行逐个对比
{
if (a[j] < sample)
{
//如果采样值比当前值大,直接下一个数
}
else//如果采样值比当前值小,那么当前位置就应该是采样值要插入的位置,
{ //把所有元素往后面的移动一个位置,空出这个位置给采样值
for (int k = index; k > j; k--)a[k] = a[k - 1];
a[j] = sample;
break;//结束程序,切换下一个采样值
}
}
}
for (int i = 0; i < 10; i++)cout << a[i] << endl;
}
如果插入排序能在再建一个数组用来存贮已经排好的数据,这样程序应该更好理解
#include<iostream>
using namespace std;
template <typename T> void InsertSort(T a[], int n)
{
int sample;//提取的样本
int index;//索引
for (int i = 0; i < n; i++)
{
sample = a[i];//从数列中一个个往后采样
index = i;//index为当前采样的序列号
for (int j = 0; j < index; j++)//将前面sample与排过序的a[0]到a[index-1]数据进行逐个对比
{
if (a[j] < sample)
{
//如果采样值比当前值大,直接下一个数
}
else//如果采样值比当前值小,那么当前位置就应该是采样值要插入的位置,
{ //把所有元素往后面的移动一个位置,空出这个位置给采样值
for (int k = index; k > j; k--)a[k] = a[k - 1];
a[j] = sample;
break;//结束程序,切换下一个采样值
}
}
}
}
int main(void)
{
int a[10] = { 10,48,8,7,6,5,4,85,2,1 };
InsertSort(a, 10);
for (int i = 0; i < 10; i++)cout << a[i] << endl;
char c[10] = { 'h','e', 'l', 'l', 'o', 'w', 'o', 'r', 'l','d',};
InsertSort(c, 11);
for (int i = 0; i < 10; i++)cout << c[i] << endl;
return 0;
}