折半插入排序

和直接插入排序相似,但是在查找有序子表的时候采用折半查找

  1. void InsertSort(ElemType A[], int n)
  2. {
  3. int i, j, low, high, mid;
  4. for(i=2; i<=n; i++)//依次将A[2]~A[n]插入到前面已排序序列
  5. {
  6. A[0]=A[i];//复制为哨兵,A[0]不存放元素
  7. low=1;//设置折半查找的范围
  8. high=i-1;
  9. while(low<=high)//折半查找,默认是递增有序
  10. {
  11. mid=(low+high)/2;
  12. if(A[mid].key>A[0].key)//查找左半边子表
  13. high=mid-1;
  14. else//查找右半边子表
  15. low=mid+1;
  16. }
  17. for(j=i-1; j>=high+1; --j)
  18. A[j+1]=A[j];//统一后移元素,空出插入位置
  19. A[high+1]=A[0]; //插入操作
  20. }
  21. }





原文地址:https://www.cnblogs.com/zhuzhenfeng/p/a325fc8e4226a9b5cc724a7a994e9fe1.html