插入排序算法分析
插入排序算法的原理类似扑克牌,最开始手中没有牌,所有的牌都反向铺在桌面上,玩家第一次起牌后,将此牌放于右手,可看成一个只有一个元素的排好序的数组,每当玩家起到其它牌的时候,就将此牌插入到合适的位置,这个合适的位置,需要玩家从右到左去比较,最终找到合适的位置,玩家左手的牌都是有序的。
代码如下所示:
#include<iostream>
using namespace std;
void insert_sort(int arr[],int size)
{
for (int i=1;i<size;i++)
{
int temp=arr[i];
for (int j=i-1;j>=0;j--)
{
if (temp<arr[j])
{
int temp1;
temp1=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp1;
}
else
break;
}
}
}
int main(int argc, char* argv[])
{
int a[]={11,6,8,97,65,24,18};
int size=sizeof(a)/sizeof(int);
insert_sort(a,size);
for (int i=0;i<size;i++)
{
cout<<a[i]<<"\t";
}
cout<<endl;
return 0;
}
using namespace std;
void insert_sort(int arr[],int size)
{
for (int i=1;i<size;i++)
{
int temp=arr[i];
for (int j=i-1;j>=0;j--)
{
if (temp<arr[j])
{
int temp1;
temp1=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp1;
}
else
break;
}
}
}
int main(int argc, char* argv[])
{
int a[]={11,6,8,97,65,24,18};
int size=sizeof(a)/sizeof(int);
insert_sort(a,size);
for (int i=0;i<size;i++)
{
cout<<a[i]<<"\t";
}
cout<<endl;
return 0;
}
运行结果:
插入排序的运行时间不仅和待排序的数组长度有关,更和数组的初始序列有关,如果一个数组是已经排好序的话,那么时间负责度为O(n),当初始序列为逆序排列的话,那么时间复杂度为O(n的平方)。