举例:{5,3,4,6,2} 从第二个数值开始比较
第一次:{5},3 < 5,则将3插到5之前
第二次:{3,5},4 < 5,则将4插入到3和5之间
第三次:{3,4,5},6 > 5,不需要进行插入
第四次:{3,4,5,6},2 < 6,依次将数据往后移,找到2 < 3的位置
代码:
/*************************************************
直接插入排序
书上的思路:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表
*************************************************/
#include "insert_sort.h"
#include <stdio.h>
void InsertSort(int *arr, int n)
{
int i;
int j;
int tmp;
for (i = 1; i < n; i++) //从第一个元素开始比较
{
if (*(arr + i) < *(arr + i - 1)) //与前一个元素相比较,若比前一个元素小,说明不是正序,需要进行排序
{
tmp = *(arr + i); //标记较小的值
for (j = i - 1; *(arr + j) > tmp; j--)
{
*(arr + j + 1) = *(arr + j); //将较大的值后移
}
*(arr + j + 1) = tmp; //插入
}
}
for (i = 0; i < n; i++)
{
printf("%d\n", *(arr + i));
}
}