算法——插入排序
博主是一个大一刚刚放暑假的大学生,大学我们只学习了c语言,现在这么卷只学c语言肯定不够,所以博主打算从零开始恶补c++顺便写文章记录一下,另外博主这个暑假还想记录一些算法基础内容欢迎关注哦。这些是是一些算法的记录和整理总结笔记要是什么时候忘记了这个算法那个算法怎么做就重新来看看,在csdn上面发是为了利用网址来编写思维导图的话比较方便~~~如果大家想跟着我一起学习也可以关注我~或者给这个文章点赞~~~谢谢大家了~
这篇是插入排序的内容
打扑克
思想:
1.从第一个元素开始,该元素可以认为已经被排序
2.取下一个元素tem,从已排序的元素序列从后往前扫描
3.如果该元素大于tem,则将该元素移到下一位
4.重复步骤3,直到找到已排序元素中小于等于tem的元素
5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置
6.重复步骤2~5
代码:
#include<iostream>
void swap_1 (int a,int b)
{
int t=a;a=b;b=t;
}
void insertion_sort(int *a,int n)
{
int i,j;
int t=a[0];
for (i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
{
if(a[j]>a[j+1])
{
int t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
}
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for (int i = 0;i < n;i++ )
cin>>a[i];
insertion_sort(a,n);
for (int i = 0;i < n;i++ )
cout<<a[i]<<' ';
return 0;
}
时间复杂度分析:
外层for循环表示通过n-1次
内层for循环表示遍历(n-1)!次也可能就看一遍不用排序了这个时候就是O(n)
所以复杂度为O(n)~O(n2)
空间复杂度分析
没有额外申请数组等只使用了一个t来进行交换
所以复杂度为O(1)