1.算法步骤
第一个数前边没有数字,不用排,相当于已经排好序了,然后第二个数插进前边,第三个数在插进前边,如果待插入的元素与有序数列里相等,则插到那个数的后面
2.相关概念
时间复杂度:
最好是o(n),
最坏的是o(n的平方)
空间复杂度:o(1)
稳定性:稳定
3.C中的代码实现,注释有讲解
void insertionsort(int arr[],int len)
{
int i=0; int j=0; int temp=0; //定义两个针头
for(i=0;i<len;i++) //这里就没有内外轮分了
{
temp=arr[i]; //第一个元素不用插入自动看作是有序,然后待插入组从第二个元素开始算
j=i-1; //针头指向了有序的最后一个数
while(j>=0&&temp<arr[j]){ //边界限制+插入判断条件
arr[j+1]=arr[j]; //插入了但不是合适的位置,则将有序的元素向后移动
j--; //指针箭头指向-1的时候跳出循环
}
arr[j+1]=tmp; //后面的数比前面的数大,则就在前边了
}
}
int main()
{
int arr[]={3,6,8,7,5,4}; //定义数组和得到长度
int len=(int)sizeof(arr)/sizeof(*arr);
seletionsort(arr,len); //传入数组和长度
int i; //函数做完后开始遍历输出
for(i=0;i<len,i++)
{printf("%d ",arr[i]);
}
return 0;
}