**
直接插入排序源代码的基础讲解
建议直接看讲解存在疑惑的可以先看看这个~具体的分析参照另一篇高阅读文章
源代码
void InsertSort( int a[],int n)
{
int i,j,tmp;
for(i=1;i<n;i++)
{
tmp=a[i];
j=i-1;
while(j>=0&&a[j]>tmp)
{
a[j+1]=a[j];
j--;
}
a[j+1]=tmp;
}
}```
## 详解
void InsertSort(int a[],int n)//传入了数组的指针和数组的大小n,函数体里可以对这两个变量进行操作*/
{
int i,j,tmp;//定义i,j为数组的指针,tmp为存储数据的临时变量
for(int i=1;i<n;i++)//i从1开始,即从数组的第二个元素开始,因为第一个元素没有相对大小,不用排序,i<n作为上限,到数组里的最后一个元素结束。*/
{
tmp=a[i];/*把a数组中第i个元素,即待排序元素复制到tmp中*/
j=i-1;/*j指针一开始指向数组中待排序元素的前一个元素,也就是已经有序的序列的最后一个元素*/
while(j>=0&&a[j]>=tmp)
/*从待排序的前一个元素开始,如果发现这个元素比待排序元素(a[i])要大,那么则把这个元素复制到后一个元素的位置里,把原来放待排序元素的位置(a[i])给挤掉。*/
/*如果待排序元素大于已经有序的序列里面最大的元素,那么很好,不用移动元素,直接把待排序元素加入已有序的序列的最后即可*/
{
a[j+1]=a[j];
j--;
}/*这里的循环结束之后,j多做了一次--,所以最终指向了理想位置的前一个位置*/
a[j+1]=tmp;/*所以最终要把tmp插入到a中第j+1个位置。
}
}