特征:
1.假设要排序的列表为arr,列表的第一个元素arr[0]默认已经是有序序列。
2.从第二个元素开始,即arr[1],向前遍历已排序的部分,将该元素插入到正确的位置。
3.在遍历已排序部分时,如果当前元素小于前一个元素,将当前元素与前一个元素交换位置,否则停止遍历。
4.重复步骤2和步骤3,直到所有元素都被插入到正确的位置。
动图:
代码示例:
#include <stdio.h>
void InsertSort(int *arr,int len) //构造函数
{
int tmp; //用于存储当前需要排序的函数
int j; //j用来代表i前面的数
for(int i=1;i<len;i++) //最前面的数不用提出来插入排序,因为前面没有数和它比较
{
tmp=arr[i]; //把数提到tmp中
for(j=i-1;j>=0;j--) //j是i前面的数,遍历i前面的数,找地方插入i
{
if(arr[j]>tmp) //找到比tmp大的元素
{
arr[j+1]=arr[j]; //将其后移一位
}
else //没有找到比tmp大的数,进入下一次寻找,i值加一
{
break;
}
}
arr[j+1]=tmp; //将数放回原位
}
}
void Show(int*arr,int len) //用于打印数组
{
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int arr[]={6,3,4,5,7,1}; //建立一维数组
InsertSort(arr,sizeof(arr)/sizeof(arr[0])); //调用两个函数
Show(arr,sizeof(arr)/sizeof(arr[0]));
return 0;
}