码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序

时间:2015-04-16 19:30:51      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

void insertSort()

{

  int a[10]={10,2,3,5,8,9,7,1,55,6};

  int nVal=0;

  for(int i=1; i<10; i++)

  {

    nVal=a[i];

 

    int j=i-1;  

    while( j>=0 && nVal<a[j] )

    {

      a[j+1]=a[j];

      j--;

    }

    a[j+1]=nVal;

  }

}

 

#如果待排序列中记录按关键字非递减有序时,所需进行关键字间比较的次数达到最小值n-1。

#若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数
技术分享
和记录移动次数
技术分享
均达到最小值:
技术分享
技术分享
#所以,直接插入排序最好的时间复杂度
技术分享

#时间复杂度为O(n2);

#稳定排序方法

 

2.折半插入排序(关键字有序排列)

void insertBSort()

{

  int a[10]={10,2,3,5,8,9,7,1,55,6};

  int nVal=0;

  for(int i=1; i<10; i++)

  {

    nVal=a[i];

    int low=0;

    int high=i-1;

    int mid=0;

    //low的位置即为要放入的元素的位置;且low始终大于high一个刻度

    while(low<=high)

    {

      mid=(low+high)/2;

      if(nVal<a[mid]) high=m-1;

      else low=m+1;

    }

    int j=i-1; 

    while( j>=low && nVal<a[j] )//或者while( j>=high+1&& nVal<a[j] ) 

    {

      a[j+1]=a[j];

      j--;

    }

    a[low]=nVal;

  }

}

 

#时间复杂度为O(n2);

 

直接插入排序

标签:

原文地址:http://www.cnblogs.com/hj-blog/p/4432924.html

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