简单插入排序的原理很简单: 所谓插入排序,就是将新加入的数据插入到一个有序数组中,并且保证插入后有序。这就要求要找到插入的位置。(图片来自维基百科)对于一个已经存在的数组(乱序),要将其有序排列(这里取从小到大),就可以按照下面的步骤: 1.先假定一个有序数组,这个数组只有一个元素,就是第一个元.....
分类:
编程语言 时间:
2014-10-07 21:43:04
阅读次数:
232
此乃一道笔试题,当时的确也出来啦。(但是在细节上还是出错啦,对多次重复出现的数字可能会重复计数,没有记录上次删除的元素)如题,有序数组,可以知道平方之后在两边的数据较大,中间的数据较小。 因此可以使用两个下标,从两边向中间扫描。将绝对值大的数字删掉,计数即可,并记录刚才删除的数值的...
分类:
其他好文 时间:
2014-10-01 00:15:30
阅读次数:
265
无序数组有序数组查找比较次数O(N)比较次数O(logN)<—二分查找插入O(1)比较次数O(N) 移动次数MaxO(N)删除比较次数O(N)比较次数O(logN) 移动次数MaxO(N)移动次数MaxO(N)--------------------------------------------....
分类:
其他好文 时间:
2014-09-30 13:37:49
阅读次数:
134
#includeusing namespace std;void Merge(int a[],int b[],int first,int mid,int last)//合并两个有序数组{ int p=first,q=mid+1; int pos=first; while(p<=mid&&q<=las...
分类:
其他好文 时间:
2014-09-29 23:36:11
阅读次数:
487
算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 1 //将有序数组a[]...
分类:
其他好文 时间:
2014-09-28 14:31:12
阅读次数:
204
今天我主要学习基于分治思想的归并排序算法,这是分治法的典型应用。废话不多说,下面直切正题。概述:将两个有序数组归并成一个更大的有序数组,我们称之为归并,人们根据这一操作发明了一种简单的递归排序算法:归并排序。归并排序最吸引人的是它能够保证任意长度为N的数组排序所需的时间和NlogN成正比;它的主要缺...
分类:
其他好文 时间:
2014-09-22 21:42:33
阅读次数:
173
题意:
给出n个数,先把各数从小到大排序,然后q次询问xi在数组中的位置,不存在则输出相应信息。
输入样例:
4 1
2
3
5
1
5
5 2
1
3
3
3
1
2
3
0 0
输出样例:
CASE# 1:
5 found at 4
CASE# 2:
2 not found
3 found at 3
//=====...
分类:
其他好文 时间:
2014-09-22 17:22:42
阅读次数:
166
归并排序
O(NlogN),所以归并排序最坏情况能够达到快速排序的平均水准
需要额外的存储空间O(n)
1、对数据不断的分割,直到剩下一个一个的
2、合并数据,在合并的时候,其实是两个有序的数组,因此
这个过程是两个有序数组进行合并排序
// 归并排序
// O(NlogN),所以归并排序最坏情况能够达到快速排序的平均水准
// 需要额外的存储空间O(n)
...
分类:
其他好文 时间:
2014-09-22 03:03:21
阅读次数:
154
现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值
分类:
其他好文 时间:
2014-09-18 23:44:14
阅读次数:
278
所谓折半查找,又称二分查找,是一种在有序数组中查找某一特定元素的搜索算法。优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元...
分类:
其他好文 时间:
2014-09-18 20:21:44
阅读次数:
265