亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stl_algo.c

?? 粗慥集成算法集合 ,并有詳細的文檔資料和測試數據處
?? C
?? 第 1 頁 / 共 5 頁
字號:

const int __stl_chunk_size = 7;
        
template <class _RandomAccessIter, class _Distance>
void __chunk_insertion_sort(_RandomAccessIter __first, 
                            _RandomAccessIter __last, _Distance __chunk_size)
{
  while (__last - __first >= __chunk_size) {
    __insertion_sort(__first, __first + __chunk_size);
    __first += __chunk_size;
  }
  __insertion_sort(__first, __last);
}

template <class _RandomAccessIter, class _Distance, class _Compare>
void __chunk_insertion_sort(_RandomAccessIter __first, 
                            _RandomAccessIter __last,
                            _Distance __chunk_size, _Compare __comp)
{
  while (__last - __first >= __chunk_size) {
    __insertion_sort(__first, __first + __chunk_size, __comp);
    __first += __chunk_size;
  }
  __insertion_sort(__first, __last, __comp);
}

template <class _RandomAccessIter, class _Pointer, class _Distance>
void __merge_sort_with_buffer(_RandomAccessIter __first, 
                              _RandomAccessIter __last,
                              _Pointer __buffer, _Distance*) {
  _Distance __len = __last - __first;
  _Pointer __buffer_last = __buffer + __len;

  _Distance __step_size = __stl_chunk_size;
  __chunk_insertion_sort(__first, __last, __step_size);

  while (__step_size < __len) {
    __merge_sort_loop(__first, __last, __buffer, __step_size);
    __step_size *= 2;
    __merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
    __step_size *= 2;
  }
}

template <class _RandomAccessIter, class _Pointer, class _Distance,
          class _Compare>
void __merge_sort_with_buffer(_RandomAccessIter __first, 
                              _RandomAccessIter __last, _Pointer __buffer,
                              _Distance*, _Compare __comp) {
  _Distance __len = __last - __first;
  _Pointer __buffer_last = __buffer + __len;

  _Distance __step_size = __stl_chunk_size;
  __chunk_insertion_sort(__first, __last, __step_size, __comp);

  while (__step_size < __len) {
    __merge_sort_loop(__first, __last, __buffer, __step_size, __comp);
    __step_size *= 2;
    __merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);
    __step_size *= 2;
  }
}

template <class _BidirectionalIter, class _Distance, class _Pointer>
void __merge_adaptive(_BidirectionalIter __first,
                      _BidirectionalIter __middle, 
                      _BidirectionalIter __last,
                      _Distance __len1, _Distance __len2,
                      _Pointer __buffer, _Distance __buffer_size) {
  if (__len1 <= __len2 && __len1 <= __buffer_size) {
    _Pointer __buffer_end = copy(__first, __middle, __buffer);
    merge(__buffer, __buffer_end, __middle, __last, __first);
  }
  else if (__len2 <= __buffer_size) {
    _Pointer __buffer_end = copy(__middle, __last, __buffer);
    __merge_backward(__first, __middle, __buffer, __buffer_end, __last);
  }
  else {
    _BidirectionalIter __first_cut = __first;
    _BidirectionalIter __second_cut = __middle;
    _Distance __len11 = 0;
    _Distance __len22 = 0;
    if (__len1 > __len2) {
      __len11 = __len1 / 2;
      advance(__first_cut, __len11);
      __second_cut = lower_bound(__middle, __last, *__first_cut);
      distance(__middle, __second_cut, __len22); 
    }
    else {
      __len22 = __len2 / 2;
      advance(__second_cut, __len22);
      __first_cut = upper_bound(__first, __middle, *__second_cut);
      distance(__first, __first_cut, __len11);
    }
    _BidirectionalIter __new_middle =
      __rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
                        __len22, __buffer, __buffer_size);
    __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                     __len22, __buffer, __buffer_size);
    __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                     __len2 - __len22, __buffer, __buffer_size);
  }
}

template <class _BidirectionalIter, class _Distance, class _Pointer,
          class _Compare>
void __merge_adaptive(_BidirectionalIter __first, 
                      _BidirectionalIter __middle, 
                      _BidirectionalIter __last,
                      _Distance __len1, _Distance __len2,
                      _Pointer __buffer, _Distance __buffer_size,
                      _Compare __comp) {
  if (__len1 <= __len2 && __len1 <= __buffer_size) {
    _Pointer __buffer_end = copy(__first, __middle, __buffer);
    merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
  }
  else if (__len2 <= __buffer_size) {
    _Pointer __buffer_end = copy(__middle, __last, __buffer);
    __merge_backward(__first, __middle, __buffer, __buffer_end, __last,
                     __comp);
  }
  else {
    _BidirectionalIter __first_cut = __first;
    _BidirectionalIter __second_cut = __middle;
    _Distance __len11 = 0;
    _Distance __len22 = 0;
    if (__len1 > __len2) {
      __len11 = __len1 / 2;
      advance(__first_cut, __len11);
      __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
      distance(__middle, __second_cut, __len22);   
    }
    else {
      __len22 = __len2 / 2;
      advance(__second_cut, __len22);
      __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
      distance(__first, __first_cut, __len11);
    }
    _BidirectionalIter __new_middle =
      __rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
                        __len22, __buffer, __buffer_size);
    __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                     __len22, __buffer, __buffer_size, __comp);
    __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                     __len2 - __len22, __buffer, __buffer_size, __comp);
  }
}

template <class _RandomAccessIter, class _Pointer, class _Distance>
void __stable_sort_adaptive(_RandomAccessIter __first, 
                            _RandomAccessIter __last, _Pointer __buffer,
                            _Distance __buffer_size) {
  _Distance __len = (__last - __first + 1) / 2;
  _RandomAccessIter __middle = __first + __len;
  if (__len > __buffer_size) {
    __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);
    __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);
  }
  else {
    __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0);
    __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0);
  }
  __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first), 
                   _Distance(__last - __middle), __buffer, __buffer_size);
}

template <class _RandomAccessIter, class _Pointer, class _Distance, 
          class _Compare>
void __stable_sort_adaptive(_RandomAccessIter __first, 
                            _RandomAccessIter __last, _Pointer __buffer,
                            _Distance __buffer_size, _Compare __comp) {
  _Distance __len = (__last - __first + 1) / 2;
  _RandomAccessIter __middle = __first + __len;
  if (__len > __buffer_size) {
    __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size, 
                           __comp);
    __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size, 
                           __comp);
  }
  else {
    __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0,
                               __comp);
    __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0,
                               __comp);
  }
  __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first), 
                   _Distance(__last - __middle), __buffer, __buffer_size,
                   __comp);
}

template <class _RandomAccessIter, class _Tp, class _Distance>
void __stable_sort_aux(_RandomAccessIter __first,
			      _RandomAccessIter __last, _Tp*, _Distance*) {
  _Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
  _Tp* __begin = buf.begin();
  if (__begin == 0)
    __inplace_stable_sort(__first, __last);
  else 
    __stable_sort_adaptive(__first, __last, __begin,
                           (_Distance)buf.size());
}

template <class _RandomAccessIter, class _Tp, class _Distance, class _Compare>
void __stable_sort_aux(_RandomAccessIter __first,
			      _RandomAccessIter __last, _Tp*, _Distance*,
			      _Compare __comp) {
  _Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
  if (buf.begin() == 0)
    __inplace_stable_sort(__first, __last, __comp);
  else 
    __stable_sort_adaptive(__first, __last, buf.begin(),
                           _Distance(buf.size()),
                           __comp);
}

template <class _RandomAccessIter>
void stable_sort(_RandomAccessIter __first,
		 _RandomAccessIter __last) {
  __stl_debug_check(__check_range(__first, __last));
  __stable_sort_aux(__first, __last,
                    __VALUE_TYPE(__first),
                    __DISTANCE_TYPE(__first));
}

template <class _RandomAccessIter, class _Compare>
void stable_sort(_RandomAccessIter __first,
		 _RandomAccessIter __last, _Compare __comp) {
  __stl_debug_check(__check_range(__first, __last));
  __stable_sort_aux(__first, __last,
                    __VALUE_TYPE(__first),
                    __DISTANCE_TYPE(__first), 
                    __comp);
}

// partial_sort, partial_sort_copy, and auxiliary functions.

template <class _RandomAccessIter, class _Tp>
void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
                    _RandomAccessIter __last, _Tp*) {
  make_heap(__first, __middle);
  for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
    if (*__i < *__first) 
      __pop_heap(__first, __middle, __i, _Tp(*__i),
                 __DISTANCE_TYPE(__first));
  sort_heap(__first, __middle);
}

template <class _RandomAccessIter, class _Tp, class _Compare>
void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
                    _RandomAccessIter __last, _Tp*, _Compare __comp) {
  make_heap(__first, __middle, __comp);
  for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
    if (__comp(*__i, *__first))
      __pop_heap(__first, __middle, __i, _Tp(*__i), __comp,
                 __DISTANCE_TYPE(__first));
  sort_heap(__first, __middle, __comp);
}

template <class _InputIter, class _RandomAccessIter, class _Distance,
          class _Tp>
_RandomAccessIter __partial_sort_copy(_InputIter __first,
                                         _InputIter __last,
                                         _RandomAccessIter __result_first,
                                         _RandomAccessIter __result_last, 
                                         _Distance*, _Tp*) {
  if (__result_first == __result_last) return __result_last;
  _RandomAccessIter __result_real_last = __result_first;
  while(__first != __last && __result_real_last != __result_last) {
    *__result_real_last = *__first;
    ++__result_real_last;
    ++__first;
  }
  make_heap(__result_first, __result_real_last);
  while (__first != __last) {
    if (*__first < *__result_first) 
      __adjust_heap(__result_first, _Distance(0),
                    _Distance(__result_real_last - __result_first),
                    _Tp(*__first));
    ++__first;
  }
  sort_heap(__result_first, __result_real_last);
  return __result_real_last;
}

template <class _InputIter, class _RandomAccessIter, class _Compare,
          class _Distance, class _Tp>
_RandomAccessIter __partial_sort_copy(_InputIter __first,
                                         _InputIter __last,
                                         _RandomAccessIter __result_first,
                                         _RandomAccessIter __result_last,
                                         _Compare __comp, _Distance*, _Tp*) {
  if (__result_first == __result_last) return __result_last;
  _RandomAccessIter __result_real_last = __result_first;
  while(__first != __last && __result_real_last != __result_last) {
    *__result_real_last = *__first;
    ++__result_real_last;
    ++__first;
  }
  make_heap(__result_first, __result_real_last, __comp);
  while (__first != __last) {
    if (__comp(*__first, *__result_first))
      __adjust_heap(__result_first, _Distance(0),
                    _Distance(__result_real_last - __result_first),
                    _Tp(*__first),
                    __comp);
    ++__first;
  }
  sort_heap(__result_first, __result_real_last, __comp);
  return __result_real_last;
}

// nth_element() and its auxiliary functions.  

template <class _RandomAccessIter, class _Tp>
void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
                   _RandomAccessIter __last, _Tp*) {
  while (__last - __first > 3) {
    _RandomAccessIter __cut =
      __unguarded_partition(__first, __last,
                            _Tp(__median(*__first,
                                         *(__first + (__last - __first)/2),
                                         *(__last - 1))));
    if (__cut <= __nth)
      __first = __cut;
    else 
      __last = __cut;
  }
  __insertion_sort(__first, __last);
}

template <class _RandomAccessIter, class _Tp, class _Compare>
void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
                   _RandomAccessIter __last, _Tp*, _Compare __comp) {
  while (__last - __first > 3) {
    _RandomAccessIter __cut =
      __unguarded_partition(__first, __last,
                            _Tp(__median(*__first,
                                         *(__first + (__last - __first)/2), 
                                         *(__last - 1),
                                         __comp)),
                            __comp);
    if (__cut <= __nth)
      __first = __cut;
    else 
      __last = __cut;
  }
  __insertion_sort(__first, __last, __comp);
}

template <class _ForwardIter, class _Tp, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
                           const _Tp& __val, _Distance*) 
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (*__middle < __val) {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
    else
      __len = __half;
  }
  return __first;
}

template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
                              const _Tp& __val, _Compare __comp, _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (__comp(*__middle, __val)) {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
    else
      __len = __half;
  }
  return __first;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品欧美精品系列| 欧美精品一级二级| 欧美精品一区二区三区高清aⅴ | 91丨porny丨首页| 精品第一国产综合精品aⅴ| 亚洲夂夂婷婷色拍ww47| 本田岬高潮一区二区三区| 日韩三级在线观看| 亚洲国产va精品久久久不卡综合| 风间由美性色一区二区三区| 欧美一区二区三区在线视频| 一区二区三区在线高清| 成人免费看黄yyy456| 精品处破学生在线二十三| 日韩av不卡在线观看| 在线免费精品视频| 日韩理论电影院| 国产精品一二三| 精品国产一区二区国模嫣然| 无吗不卡中文字幕| 91成人免费在线视频| 最新不卡av在线| jlzzjlzz亚洲女人18| 中文字幕精品一区| 国产精品一区专区| 亚洲精品一区二区在线观看| 麻豆精品新av中文字幕| 7777精品伊人久久久大香线蕉经典版下载 | 狠狠色狠狠色综合| 欧美精品免费视频| 亚洲大片精品永久免费| 欧美自拍丝袜亚洲| 一区二区三区中文字幕精品精品 | 欧美在线高清视频| 亚洲精品国产一区二区精华液| 99久久综合99久久综合网站| 欧美国产一区二区在线观看| 国产精品18久久久久| 久久―日本道色综合久久| 久久99国产精品久久99果冻传媒| 4438x亚洲最大成人网| 偷拍日韩校园综合在线| 91精品欧美综合在线观看最新| 午夜不卡av免费| 在线不卡一区二区| 日韩国产欧美三级| 日韩精品一区二区在线观看| 久久不见久久见免费视频1 | 91久久人澡人人添人人爽欧美| 国产精品国产三级国产有无不卡 | 国产综合色产在线精品| 久久免费视频色| 床上的激情91.| 亚洲精品久久7777| 欧美精品自拍偷拍| 久久精品国产一区二区三| 久久久亚洲国产美女国产盗摄| 国产不卡免费视频| 亚洲欧洲国产日本综合| 欧美午夜一区二区| 另类小说图片综合网| 久久久久国产一区二区三区四区| 国产成人免费视频网站高清观看视频| 国产精品网站在线| 色综合久久综合| 日韩中文字幕区一区有砖一区| 欧美成人aa大片| 国产凹凸在线观看一区二区| 综合激情网...| 欧美日韩一区三区四区| 捆绑变态av一区二区三区| 国产蜜臀av在线一区二区三区| 99热在这里有精品免费| 亚洲一区在线看| 日韩免费看的电影| www.亚洲在线| 天使萌一区二区三区免费观看| 欧美成人免费网站| av在线不卡免费看| 午夜精品福利一区二区三区蜜桃| 2014亚洲片线观看视频免费| 91原创在线视频| 日韩av网站在线观看| 国产嫩草影院久久久久| 欧美喷潮久久久xxxxx| 国产毛片精品视频| 亚洲综合在线第一页| 亚洲精品在线一区二区| 在线免费观看一区| 国产在线视频精品一区| 亚洲裸体xxx| 精品国产乱码久久久久久久| 91视频免费播放| 久久国产乱子精品免费女| 亚洲免费毛片网站| 精品国产免费人成在线观看| 97久久久精品综合88久久| 久色婷婷小香蕉久久| 亚洲裸体xxx| 久久九九久精品国产免费直播| 欧美亚洲综合网| 国产精品99久久久久久有的能看| 亚洲一区二区三区激情| 国产日韩欧美在线一区| 欧美三日本三级三级在线播放| 国产成人无遮挡在线视频| 亚洲v精品v日韩v欧美v专区| 国产精品福利一区| 欧美电影精品一区二区| 欧美无砖砖区免费| aaa欧美色吧激情视频| 另类小说一区二区三区| 亚洲午夜国产一区99re久久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 成人免费视频一区二区| 美脚の诱脚舐め脚责91| 亚洲女性喷水在线观看一区| 国产欧美日韩在线| 精品日韩一区二区| 欧美精品自拍偷拍| 91丨九色丨蝌蚪富婆spa| 国产一区二区在线看| 视频一区欧美精品| 一区二区在线免费| 国产精品久久久久精k8 | 宅男噜噜噜66一区二区66| 91麻豆高清视频| 成人一区在线观看| 久久99国产精品久久99果冻传媒| 亚洲高清一区二区三区| 亚洲女同一区二区| 国产精品国产精品国产专区不蜜 | 日韩一区国产二区欧美三区| 色婷婷综合在线| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 欧美精品国产精品| 欧美在线影院一区二区| 成人avav影音| 国产成人精品亚洲777人妖| 美脚の诱脚舐め脚责91| 三级一区在线视频先锋| 亚洲成人综合视频| 亚洲成人激情综合网| 亚洲午夜在线电影| 亚洲图片有声小说| 亚洲五月六月丁香激情| 亚洲欧美一区二区三区久本道91| 国产精品欧美久久久久无广告 | 国产精品嫩草影院com| 久久精品免视看| 精品奇米国产一区二区三区| 欧美一区二区精品在线| 日韩一区二区免费视频| 欧美一区日本一区韩国一区| 欧美日韩激情一区二区三区| 欧美美女直播网站| 91麻豆精品国产91久久久使用方法 | 精一区二区三区| 捆绑变态av一区二区三区| 日本美女一区二区三区视频| 日本午夜精品视频在线观看| 日本免费在线视频不卡一不卡二| 日韩国产一区二| 麻豆精品视频在线| 精品综合久久久久久8888| 国内欧美视频一区二区| 国产一区二区精品久久91| 国产一二三精品| av在线不卡电影| 在线观看一区二区视频| 欧美日韩一区二区三区在线看| 911精品产国品一二三产区| 91精品国产乱码| 亚洲精品在线观看视频| 中文字幕成人在线观看| 最新国产精品久久精品| 亚洲一本大道在线| 日本欧美一区二区在线观看| 韩国三级中文字幕hd久久精品| 国产经典欧美精品| 99热在这里有精品免费| 欧美日韩中文字幕一区| 日韩精品一区二区三区视频| 国产欧美日韩在线观看| 亚洲美女区一区| 奇米777欧美一区二区| 国产成人亚洲综合a∨婷婷| 91在线一区二区| 在线成人免费观看| 久久精品视频一区二区| 亚洲欧洲精品一区二区精品久久久 | 欧美日韩一区二区三区在线看| 91精品国产高清一区二区三区| 久久精子c满五个校花| 亚洲色图视频网站| 免费成人在线观看| 成人一区二区三区视频| 欧美午夜精品久久久久久超碰 | 色哟哟在线观看一区二区三区| 欧美性猛交xxxx黑人交|