*在进行第i遍时,[0 ,i-1]范围内的元素已经排序完毕
*第i遍的任务时通过扫描以前已分类的子表,给vec[i]在[0,i]的子表范围内找到正确的位置*插入排序并不需要额外的辅助空间,只是在原数组上进行排序
例如,对字符串数组Monroe,Chin,Flores,Stein,Dare进行插入排序
实现代码:
template<typename T>
void insertSort(vector<T> &vec)
{
for(int i=1;i<vec.size();i++)
{
T tem=vec[i];//用tem记下将要被插入排序的vec[i]
int j=i;
for(;j>0&&vec[j-1]>tem;j--)//扫描已分类的子表[0 ,i-1],给vec[i]在[0,i]的子表范围内找到正确的位置
{
vec[j]=vec[j-1];
}
vec[j]=tem;
}
}
int main()
{
vector<string> vec{string("Monroe"),string("Chin"),string("Flores"),string("Stein"),string("Dare")};
insertSort(vec);
for(string str:vec)
{
cout<<str<<ends;
}
return 0;
}