/*
直接插入排序:时间复杂度o(n^2) 空间复杂度o(1) 稳定性:稳定
给一组数字,从第二个开始开始排序(认为第一个数字是有序的),于是前两个数字就是有序的,第三个数字
按大小顺序插入到前面的有序数列中,依次类推…
*/
void Insert_Sort(int *arr,int len)
{
for(int i = 1; i < len; i++) //从1号下标开始一直处理到 len位置
{
int tmp = arr[i]; //先用tmp保存arr[i]的值
int j;
for(j = i - 1; j >= 0; j--) //把arr[i]放到合适的位置
{
if(arr[j] > tmp)
{
arr[j + 1] = arr[j]; /*arr[j + 1] 不一定和arr[i] 相等*/
}
else
{
break;
}
}
arr[j + 1] = tmp; //j + 1为按序插入的位置(不是 j ),把arr[i]放进去
}
}
void Show(int *arr, int len) //打印函数,打印出当前数组中的所有值
{
for(int j = 0; j < 20; j++)
{
printf("%d ",arr[j]);
}
printf("\n");
return;
}
int main()
{
int arr[20] = {0};
for(int i = 0; i < 20; i++)
{
arr[i] = rand()%100; //arr[i] 为100以内的随机值
}
Show(arr,20);
Insert_Sort(arr,20);
Show(arr,20);
return 0;
}
测试结果如下