最小的k个数

输入n个整数，找出其中最小的k个数。
这里采用了C++ STL的sort函数。先排序，然后去最小的k个数。
还有一种方法是跟前面一个找出现次数超过一半数字差不多的方法，根据快排的partition启发，如果index为k-1就表示左边的是比arr[k
- 1]数小的，右边的是比他大的，这样就找到了。否则就循环直到找到这个k-1的index。  O(n)
另外一种适合海量数据的处理方法，用到了C++的multiset，因为还没看C++的这些东西，所以暂且搁一搁
数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。

解法一，将这个数组进行排序（快排），那么位于数组中间的数字一定就是那个出现次数超过数组长度一半的数字。然后计算这个数字出现的次数，如果次数大于长度的一半，则他就是我们所要找的，否则就没有。

解法二，由快排的思想，可以得到，每次partition得到的数字，如果他的下标恰好在n/2，那么这个数字就是数组的中位数。如果他的下标大于n/2，那么中位数位于塔的左边，否则位于它的右边。循环处理，直到是中位数或者只剩一位数。

解法三：由题意可以得到，这个数字出现的次数比其他所有数字出现的次数的和还要多。保存一个数字和次数，如果下一个数字和我们保存的数字相同，则次数加1.否则次数减1。如果次数减到了0，则就将次数置为1，并将保存的数字替换为当前的数字。那么要找的数字肯定是最后一次设为1时对应的数字。