一.算法思路
1.假设要排序的列表为arr,列表的第一个元素arr[0]默认已经是有序序列。
2.从第二个元素开始,即arr[1],向前遍历已排序的部分,将该元素插入到正确的位置。
3.在遍历已排序部分时,如果当前元素小于前一个元素,将当前元素与前一个元素交换位置,否则停止遍历。
4.重复步骤2和步骤3,直到所有元素都被插入到正确的位置。
二.图片解析
三.代码实现
#include<stdio.h>
void InsertSort(int* arr,int len)
{
for (int i = 1; i < len; i++)
{
int k = arr[i];
for (int j = i - 1; j >=0; j--)
{
if (k >= arr[j])
{
arr[j + 1] = k;
break;
}
else
{
arr[j + 1] = arr[j];
if (j == 0)
{
arr[0] = k;
}
}
}
}
}
int main()
{
int arr[] = { 2,4,3,5,1,6,32,231,12};
int len = sizeof(arr) / sizeof(arr[0]);
InsertSort(arr, len);
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}