直接插入排序

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);

 

posted @ 2015-04-16 18:32  hy1hy  阅读(152)  评论(0编辑  收藏  举报