归并排序mergesort中基本的操作是合并两个已排序的表。因为这两个表已排序,所以若将输出放到第三个表中,则该算法可以通过对输入数据一趟排序完成。基本的合并算法是取两个输入数组A和B,一个输出数组C,以及3个计数器Actr、Bctr、Cctr,他们初始置于对应数组的开始端。A[Actr]和B[Bctr]中的较小者被拷贝到C的下一个位置,相关的计数器向前推进一步。当两个输入表有一个用完的时候,则将...
分类:
编程语言 时间:
2015-08-21 21:30:37
阅读次数:
233
Write a program to check whether a given number is an ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it...
分类:
其他好文 时间:
2015-08-21 17:15:20
阅读次数:
143
选择排序
思想:每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。
关键问题:在剩余的待排序记录序列中找到最小关键码记录。
方法:
–直接选择排序
–堆排序
(1)简单的选择排序
1、基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数...
分类:
编程语言 时间:
2015-08-21 15:37:35
阅读次数:
227
/**
* 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置。
*/
/**
* 思路:对二分查找法做修改,与mid比较的地方,如果mid为空字符串,则将mid换到离它最近的非空字符串的位置。
* @param strings
* @param str
* @return
*/
public static int search(Strin...
分类:
编程语言 时间:
2015-08-21 11:28:07
阅读次数:
200
/**
* 功能:给定M*N矩阵,每一行、每一列都按升序排列,找出某元素。
*/
两种方法:
方法一:
/**
* 思路:若列的末端大于x,那么x位于该列的左边;若行的开头小于x,那么x位于列的下边。从矩阵中的子矩阵中查找元素。
* @param matrix
* @param elem
* @return
*/
public static b...
分类:
编程语言 时间:
2015-08-21 11:20:43
阅读次数:
298
问题:
假设有这样一个拥有3个操作的队列:
1. EnQueue(v): 将v加入队列中
2. DeQueue(): 使队列中的队首元素删除并返回此元素
3. MaxElement: 返回队列中的最大元素
设计一种数据结构和算法,让MaxElement操作的时间复杂度尽可能地低。
思路:
(1)用两个栈设计一个新的数据类型(数据类型定义为MyStack),其中一个栈用来存...
分类:
其他好文 时间:
2015-08-21 00:21:47
阅读次数:
287
/**
* 功能:给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B。将B合并入A并排序。
*/
/**
* 问题:如果将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间。
* 思路:将元素插入数组A的末端。
*
* 注意:在处理完B的元素之后,不需要复制A的剩余元素,因为那些元素原本就在A中。
* @param a
* @pa...
分类:
编程语言 时间:
2015-08-20 19:00:16
阅读次数:
168
/**
* 功能:对字符串数组进行排序,将所有的变位词排在相邻的位置。
*/
两种方法:
方法一:
/**
* 思路:套用排序算法,并修改比较器。这里比较器用来指示两个字符串胡伟变位词就是相等的。
* @param array
*/
public static void sort(String[] array){
Arrays.sort(array, ne...
分类:
编程语言 时间:
2015-08-20 18:58:42
阅读次数:
168
/**
* 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详。找出数组中的某个元素。
* 可以假定数组元素原先是按从小到大的顺序排列的。
*/
/**
* 思路:数组被旋转过了,则寻找拐点。
* @param a
* @param left
* @param right
* @param x:要搜索的元素
* @return
...
分类:
编程语言 时间:
2015-08-20 18:55:35
阅读次数:
166
请计算出 1到10直间的所有数字中一共出现了多少个1?也许你会笑笑说,那还不简单,两个呗!
那么1到1000呢?1到10000呢?这就需要计算一下了
其实计算某个数字在某个范围内出现的次数,完全可以使用Stringd的replaceAll() 方法。
首先将所有的数字连接成串(StringBuffer),...
分类:
其他好文 时间:
2015-08-20 17:02:20
阅读次数:
82