插入排序C++实现

代码如下,时间复杂度为O(n^2)空间复杂度为O(1)特点:稳定适合简单排序,数据量较小的情况

#include<iostream>
#include<cstdlib>
#include <ctime>
using namespace std;

void InsertionSort (int a[],int len)
{
if (a==NULL||len<=1)
{
return ;
}
for(int j=1;j<len;j++)
{
int temp=a[j];
int p=j;
while(p>0&&a[p-1]>temp)
{
a[p]=a[p-1];
p--;
}
a[p]=temp;
}
}

void InsertionTwoSort (int a[],int len)
{
if (a==NULL||len<=1)
{
return ;
}
for(int j=1;j<len;j++)
{
int temp=a[j];

           //可以考虑二分插入

int start=0,end=j;
while(start<end)
{
int mid=start+(end-start)/2;
if (a[mid]<temp)
{
start=mid+1;
}
else
end=mid;
}
int p=j;
while(p>end)
{
a[p]=a[p-1];
p--;
}
a[p]=temp;
}
}
void SortRunTime(int a[],int length)
{
clock_t start,end;
start=clock();
InsertionTwoSort(a,length);
end=clock();
cout<<" Insert RunTime : "<<(double)(end-start)/CLOCKS_PER_SEC;
}
int rand(int p,int q)
{
int size=q-p+1;
return p+rand()%size;
}

int main()
{
int a[100000];
int num=100000;
for (int i=0;i<num;i++)
{
a[i]=rand(0,200000);
}
SortRunTime(a,num);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值