插入排序的基本思想
- 每一步将一个待排序元素按其关键字值的大小插入到已排序序列的适当位置上,直到待排序元素插入完为止。
插入排序的示意图
直接插入排序函数模板
template <class T>
void insertionSort(T a[], int n) {
int i, j;
T temp;
for (int i = 1; i < n; i++) {
int j = i;
T temp = a[i];
while (j > 0 && temp < a[j - 1]) {
a[j] = a[j - 1];
j--;
}
a[j] = temp;
}
}
代码:
#include<iostream>
using namespace std;
int* px(int* a, int n)
{
int i,j;
int tmp;
for(i=1;i<n;i++)
{
j = i;
tmp = a[i]; //让要插入的数于a[j-1]
while(j>0 && tmp<a[j-1])//比较如果这个数小了就
{ //继续比较直到不大不小的
a[j] = a[j-1]; //位置就为止
j--; //如果没有进入循环
} //就是这个数是最大的
a[j] = tmp; //直接a[j] = tmp
}
return a;
}
int main(int argc, char** argv)
{
int a[10] = {6,4,3,64,66,5,3,6,10,4};
cout<<"排序前:"<<endl;
for(int i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"排序后:"<<endl;
px(a,10); //调用排序函数
for(int i=0;i<10;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}