⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 select.h

📁 一本全面剖析C++数据结构算法的书籍
💻 H
字号:
// file select.h// find the k'th smallest element#ifndef Select_#define Select_#include "xcept.h"#include "swap.h"template<class T>T select(T a[], int l, int r, int k){// Return k'th smallest in a[l:r].   if (l >= r) return a[l];   int i = l,      // left to right cursor       j = r + 1;  // right to left cursor   T pivot = a[l];   // swap elements >= pivot on left side   // with elements <= pivot on right side   while (true) {      do {// find >= element on left side         i = i + 1;         } while (a[i] < pivot);      do {// find <= element on right side         j = j - 1;         } while (a[j] > pivot);      if (i >= j) break;  // swap pair not found      Swap(a[i], a[j]);      }   if (j - l + 1 == k) return pivot;   // place pivot   a[l] = a[j];   a[j] = pivot;   // recursive call on one segment   if (j - l + 1 < k)      return select(a, j+1, r, k-j+l-1);   else return select(a, l, j-1, k);}template<class T>T Select(T a[], int n, int k){// Return k'th smallest element in a[0:n-1]. // Assume a[n] is a dummy largest element.   if (k < 1 || k > n) throw OutOfBounds();   return select(a, 0, n-1, k);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -