迭代器是类似指针的对象,分为5种,输入,输出,前向,双向和随机访问 输入迭代器(InputIterator) 输入迭代器并不是指某种类型,而是指一系列类型 举例 template<class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& val) { while (first!=last) { if (*first==val) return fi
一个二分partition算法,将整个数组分解为小于某个数和大于某个数的两个部分,然后递归进行排序算法. 法一: int partition(vector<int>&arr, int begin, int end){ int pivot = arr[begin]; // Last position where puts the no_larger element. int pos = begin; ; i!=end; i++){ if(arr[i] <= pivot){ pos+
接前文,除了广泛使用在快速排序中.Partition算法还可以很容易的实现在无序序列中使用O(n)的时间复杂度查找kth(第k大(小)的数). 同样根据二分的思想,每完成一次Partition我们可以轻松的知道该位置前面有几个比自己小的数,后面有几个比自己大的数(或逆序相反).所以也能知道自己是第几大或者小的数. 查找kth(大/小) func partition(left int, right int, arr []int) (int) { i := left j := right pivot
private int partition(int[] nums, int lo, int hi) { if (lo >= hi) { return lo; } int i = lo; int j = hi + 1; int v = nums[lo]; while (true) { while (nums[++i] < v) if (i == hi) break; while (nums[--j] > v) if (j == lo) break; if (i >= j) { bre