插入排序:
把数据看成两个部分,前部分是有序的,把剩余部分的数据逐个往前比较,如果比前面的数小,前面的数往后移动一位,继续往前比较,直到遇到更小的数,那么该数据的后一个位置即为可以插入的位置
适合对已经排序后的数据,新增数据后再排序
时间复杂度:O(N^2)
稳定的
代码:
void insertion_sort(TYPE* arr,size_t len)
{
printf("%s:\n",__func__);
show(arr,LEN);
for(int i=1,j=0; i<len; i++)
{
int val = arr[i]; // 要插入的数据
for(j=i; j>0 && arr[j-1] > val; j--)//j表示要插入的位置
{
arr[j] = arr[j-1];
}
if(j!=i) arr[j] = val;
}
}