1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 } ...
分类:
编程语言 时间:
2018-09-14 01:05:00
阅读次数:
163
利用快排思想:先确定一个轴点,然后进行交换使得轴点左边的值比轴点小,轴点右边的值比轴点大,当我们找到轴点位于第N-K个位置的时候说明找到第K大的值。也可以反过来逆序。时间复杂度为O(N). 代码如下: ...
分类:
编程语言 时间:
2018-07-30 23:03:03
阅读次数:
206
https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&tqId=11166&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews% ...
分类:
编程语言 时间:
2018-07-27 14:37:28
阅读次数:
193
利用快排思想,如果标志位大于k,则第k小的数字在左边,否则在右边。(程序是第k大的元素) ...
分类:
其他好文 时间:
2018-06-19 17:12:28
阅读次数:
139
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 题目分析 这题有两种方法来做。 第一种就是基于partition的方法,详见我的另一篇文章:基于快排思想查找第K大的数或第K小的数。 第二种就是利用一个长度为k的额外 ...
分类:
其他好文 时间:
2018-04-06 23:42:07
阅读次数:
223
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 题目分析 这题也有两种做法: 第一种:基于快排思想中的partition函数来 ...
分类:
其他好文 时间:
2018-04-06 10:51:55
阅读次数:
151
快排思想:在数据序列中选择一个值作为key(基准)值,每趟从数据序列的两端开始交替进行,将小于key的元素交换到序列前端,将大于key的元素交换到序列后端,介于两者之间的位置则成为key的最终位置,同时,序列被划分为两个子序列,在用同样的方法分别对两个子序列进行排序,直到子序列的长度为1,则完成排序 ...
分类:
编程语言 时间:
2016-12-25 17:52:53
阅读次数:
262
快速排序 1、思想 快速排序将一个数组分成两个数组,再对两个数组独立排序,是个递归算法。 首先随机选出一个切分元素temp(一般为这个数组的第一个元素),将小于temp的数放在temp的左边,将大于temp的数放在temp的右边。 快排和堆排序很像,他们都是将一个数组分成两个子数组,都属于递归算法。 ...
分类:
编程语言 时间:
2016-10-09 13:28:00
阅读次数:
165
思想:快排的思想就是每排一次,就会把一个数(也就是我们选定的那个key)放到它在这个序列中正确的位置,所以每排一次就返回这个数所在下标看它是不是我们所要找的那个数(对应下面代码的ret是否等于size-k)#include<iostream>
#include<vector>
intQuockSort(i..
分类:
其他好文 时间:
2016-08-11 16:03:56
阅读次数:
188
/** 快速排序OC 实现: 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也 ...
分类:
编程语言 时间:
2016-06-13 13:46:12
阅读次数:
448