码迷,mamicode.com
首页 > 其他好文 > 详细

插入类的排序算法

时间:2014-09-01 10:32:32      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   for   div   log   sp   amp   时间   

#include<stdio.h>
/*
* 插入排序算法 每天一道算法题 
*/
void traverseArray(int *p,int length)
{
   int i=0;
   for(;i<length;i++)
   {
     printf("%d\n",p[i]);
   } 

}
//直接插入排序 
void insertSorted(int *p,int length)
{
   int i,j,temp;
   for(i=1;i<length;i++)
   {
     if(p[i]<p[i-1])
     {
       temp=p[i];
       p[i]=p[i-1];
       for(j=i-2;j>-1&&temp<p[j];j--)
          p[j+1]=p[j];
       p[j+1]=temp;
     
     }
   }
} 
//折半插入排序 
void BinsertSort(int *p,int length)
{
  int i,j,temp,low,high,m;
  for(i=1;i<length;i++)
  {
    low=0; 
    high=i-1;
    temp=p[i];
    while(low<=high)
    {
       m=(low+high)/2;
      if(p[m]>temp)
          high=m-1;
      else 
          low=m+1; 
    }
    for(j=i-1;j>=high+1;j--)
      p[j+1]=p[j];
    p[j+1]=temp;  
  }
}
//希尔排序
void ShellSort(int *p,int length,int dk)
{
  int i,j,temp;
  for(i=dk;i<length;i++)
  {                  
    if(p[i-dk]>p[i])
    {
      temp=p[i]; 
      for(j=i-dk;j>-1&&p[j]>temp;j-=dk)
         p[j+dk]=p[j];
      p[j+dk]=temp;
    }
  }
} 
int main()
{
  int a[]={3,2,1,4,5,7,9,8,6}; 
 // insertSorted(a,sizeof(a)/sizeof(int));
 // BinsertSort(a,sizeof(a)/sizeof(int));
  int i=4;
   for(;i>0;i--)
   {
    ShellSort(a,sizeof(a)/sizeof(int),i);
    traverseArray(a,sizeof(a)/sizeof(int));
    printf("\n");
   }
  traverseArray(a,sizeof(a)/sizeof(int));
  system("pause");  
} 

 直接插入排序算法逆序比较的次数(n-2)(n+1)/2,需要移动的次数为(n+4)(n-1)/2,如果是正序的话,需要比较的次数为n-1,此时不需要移动,平均算法比较和移动的次数为n2/4,算法的时间复杂度为O(n2)。

   折半插入排序算法移动的次数和直接插入排序是相同的,比较的次数比直接插入排序减少,因此算法的时间复杂度为O(n2)。

   希尔排序的思想每次先把组内的顺序排好,然后再修改组的大小,直到为1为止。希尔排序最好的的时间复杂度为n1.3。

   插入类排序思想编程在于,每一次进行排序时,前面已经排序有序的,因此只要从后面往前面依次比较即可,需要注意内层循环的边界值,应该可以取到0值,否则第一个值就无法与后面的值进行比较。

  插入类排序适用于基本有序的序列,其为稳定类排序。

 

插入类的排序算法

标签:blog   io   ar   for   div   log   sp   amp   时间   

原文地址:http://www.cnblogs.com/moshang/p/3948616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!