本系列最后一篇,综合分析下前面介绍的八种排序算法的效率,以及各自的适用情况。 通知实际测试比较各排序算法的效率,并分析各个排序算法的适用场景。...
分类:
编程语言 时间:
2015-08-21 21:37:36
阅读次数:
301
/**
* 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置。
*/
/**
* 思路:对二分查找法做修改,与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
/**
* 功能:给定两个排序后的数组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.常用的排序算法排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n2)O(n*log2n)不一顶O(n)插入排序O(n2)O(n2)稳...
分类:
编程语言 时间:
2015-08-19 01:55:27
阅读次数:
138
排序:将一连串记录按照关键字的大小(从大到小或从小到大)进行排列。
稳定性:如果两个大小相同的关键字的相对位置在排序前和排序后是一样的(Ai等于Aj,排序前Ai 在Aj的前面,排序后Ai 还是在Aj的前面),那么这种算法就是稳定的。
稳定的排序算法有:冒泡排序、直接插入排序、归并排序、基数排序
不稳定的排序算法有:选择排序、快速排序、希尔排序、堆排序
冒泡排序:...
分类:
编程语言 时间:
2015-08-17 12:06:36
阅读次数:
194
归并排序
什么是归并排序:
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序的详细介绍:
说道归并排序,...
分类:
编程语言 时间:
2015-08-16 12:22:52
阅读次数:
138