插入排序是啥类型的排序
插入类型的
插入排序经常用在啥类型场景下
用在有序序列下的基础上插入新数据
时间复杂度分析
如果是有序的基础下,最好的时间复杂度是O(n);
普通情况下是O(n^2)
插入排序的原理是啥?
插入排序就是把待插入数据讲已排好顺序的树进行循环比较然后放在合适位置
例如:
已排序好的树有1 3 6;
待排序数是5,把5依次和上面数据进行比较,最终确定放在3后面
即1 3 5 6
代码实战
本次代码实现有从后往前循环比较
//插入排序,本次实现从小到大排序
void insert_sort(int nums[],int len)
{
int i=0,j=0;
for(i=1;i<len;++i)//外层循环控制待排序数
{
int insertVal = nums[i];//用来临时存储带插入的数据
//从待插入数据的位置的前一个开始往前面循环比较
for(j=i-1;j>=0 && nums[j]>insertVal;--j)//前面的数据大于待插入数据,进入函数
{
nums[j+1]=nums[j];
}
nums[j+1] = insertVal;//插入待排序数据
}
}
可执行代码如下
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
void swap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
void rangnums(int nums[],int len)
{
srand(time(NULL));
//初始化数组
printf("初始化数组:");
for(int i=0;i<len;i++)
{
nums[i]=rand()%100+1;
printf("%d ",nums[i]);
}
puts("");
}
void print(int a[],int len)
{
for(int i=0;i<len;i++)
{
printf("%d ",a[i]);
}
puts("");
}
//插入排序
void insert_sort(int nums[],int len)
{
int i=0,j=0;
for(i=1;i<len;++i)
{
int insertVal = nums[i];//用来临时存储带插入的数据
for(j=i-1;j>=0 && nums[j]>insertVal;--j)
{
nums[j+1]=nums[j];
}
nums[j+1] = insertVal;//插入待排序数据
}
}
int main()
{
int a[10]={92 ,79 ,49, 59, 86 ,38, 94, 64, 92, 3};
rangnums(a,10);
insert_sort(a,10);
print(a,10);
}