二分插入排序

Code:
  1. #include <iostream>   
  2. #include <algorithm>   
  3. using namespace std;   
  4.   
  5. template <typename Type>   
  6. struct Print   
  7. {   
  8.  void operator ()(Type& item)   
  9.  {   
  10.   cout << item << '/t';   
  11.  }   
  12. };   
  13.   
  14. void sort(int x[], int n)   
  15. {   
  16.  int temp;   
  17.  int pos;   
  18.  int low;   
  19.  int high;   
  20.  int mid;   
  21.  for(int i = 1; i < n; ++i)   
  22.  {   
  23.   temp = x[i];   
  24.   pos = -1;    
  25.   if (temp < x[0])   
  26.   {   
  27.    pos = 0;   
  28.   }   
  29.   else if (temp < x[i - 1])   
  30.   {   
  31.    low = 0;   
  32.    high = i - 1;   
  33.    while (low <= high)   
  34.    {   
  35.     mid = (low + high) / 2;   
  36.     if (x[mid] <= temp)   
  37.     {   
  38.      low = mid + 1;   
  39.     }   
  40.     else  
  41.     {   
  42.      high = mid - 1;   
  43.     }   
  44.    }   
  45.    pos = low;   
  46.   }   
  47.      
  48.   if (pos >= 0)   
  49.   {   
  50.    memmove((void*)&x[pos + 1], (void*)&x[pos], sizeof(int) * (i - pos));   
  51.    x[pos] = temp;   
  52.   }   
  53.  }   
  54. }   
  55.   
  56.   
  57.   
  58. int main(int argc, char *argv[])   
  59. {   
  60.  int x[10];   
  61.  for(int i = 0; i < 10; ++i)   
  62.  {   
  63.   x[i] = rand() % 100;   
  64.  }   
  65.     
  66.  for_each(x, x + 10, Print<int>());   
  67.  cout << endl;   
  68.     
  69.  sort(x, 10);   
  70.     
  71.  for_each(x, x + 10, Print<int>());   
  72.  cout << endl;   
  73.     
  74.  return 0;   
  75. }   

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值