标签:
一 插入排序分析
对于这种插入排序呢,我认为这就是另一种排序的思想,逐个拿出每一个元素从该元素的前一个开始比较(从小到大),如果该元 素比它的前元素小,就将前元素的值赋值给该元素,直到不满足条件为止j>=0&&array[j]>min,当循环结束后, 执行 array[j+1]=min;就可以成功的将元素插入,其实这样做的话,数组前面就是有序的,而后面是无序,思想就是这样子了,但是对于时间的复 杂度吗?按照最坏的情况就是倒序时,你在正序排一遍,假如我5个数,5,4,3,2,1

可以很容易的看出来O(n)=1+2+3+4+ · · · · ·+(n-1)这为前n-1项数之和,即就是时间复杂度为O(n^2)
二 代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void insertsort(int array[],int n) // 实现排序的函数
{
int i,j,min=0;
for(i=0;i<n;i++)
{
min=array[i];
for(j=i-1;j>=0&&array[j]>min;j--)
array[j+1]=array[j];
array[j+1]=min;
}
}
int main() // 主函数
{
int array[100];
int i=0,n;
srand ( (unsigned)time (NULL) );
printf("请你输入要排序的个数: ");
scanf("%d",&n);
printf("随机产生%d个数: ",n);
for(i=0;i<n;i++)
{
array[i]=rand()%10+10; //产生10~20之间的数
printf("%d ",array[i]);
}
insertsort(array,n); // 实现排序的函数
printf("\n排序之后为:",n);
for(i=0;i<n;i++)
{
printf("%d ",array[i]);
}
printf("\n");
return 0;
三 结果演示
为了方便起见,我直接用来随机产生数的函数,只要输入你要排序几个数即可,如果想手动输入的话,对上面简单修改就可以了,我也就不废话了

标签:
原文地址:http://www.cnblogs.com/yunitongxing/p/4923653.html