排序
qq_33296156
这个作者很懒,什么都没留下…
展开
-
算法练习bat----------02归并排序
归并排序一个重要的思想是递归,每次划分成两份,直到不能划分public static void mergeSort(int[] arr) { if (arr == null || arr.length < 2) {//数组至少有长度为2 return; } mergeSort(arr, 0, arr.length - ...原创 2018-08-24 19:53:17 · 93 阅读 · 0 评论 -
算法题目---------------02使用队列实现栈,使用栈实现队列
使用两个队列,往其中一个队列进队,假设进入N个数,那么如果要出栈,则将N-1个数复制到另一个队列,剩下的那个就是出栈的数 使用栈实现队列,将数据放入一个栈,若要实现队列的先进先出,则将所有的数据放入另一个栈,依次出栈即可约束条件:若要放入的另一个栈中有元素,则不能倒数据进入 每次倒数据,要把数据倒完public void dao(){ if(!stackPop....原创 2018-09-13 21:12:43 · 222 阅读 · 0 评论 -
算法题目---------------01.实现一个特殊的栈,在栈的基本功能上,在实现返回栈中最小的元素
要求:pop,push,getMin操作时间复杂度为O(1) 设计的栈类型可以使用现成的栈结构设计两个栈,data中不用管,只需要入栈,当data中入栈,则min中做比较,如果min中没有,则直接入栈, 若有则用min中的栈顶的元素和data中入栈的元素进行比较, 若min中栈顶比较小,则向min中压入当前min栈顶中的元素,若min栈顶中的元素比较大,则压入data中刚刚入栈...原创 2018-09-13 20:48:40 · 391 阅读 · 0 评论 -
算法练习bat----------10用数组结构实现大小固定的队列和栈
1.使用数组实现大小固定的栈(使用变量index来模拟栈中的指针) public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new Ill...原创 2018-09-13 20:33:20 · 207 阅读 · 0 评论 -
算法练习bat----------09桶排序,基数排序,计数排序
桶排序,计数排序,基数排序:不基于比较的排序,只与数据状况有关桶:一种数据状况出现的词频,例如给定了0~60上的数组,无序,那么如果要用桶,可以创建一个长度为61的数组,记录对应该数出现的次数,例如:3,5,1,1,60,那么在创建的数组上对应arr[0]=1,arr[5]=1,arr[1]=2,arr[60]=1,这其实就是计数排序(桶排序的一种) 数组排序之后相邻数的最大差值...原创 2018-09-13 19:52:34 · 159 阅读 · 0 评论 -
算法练习bat----------08自定义比较器
public static class Student { public String name; public int id; public int age; public Student(String name, int id, int age) { this.name = name; this.id = id; this.age = age; } ...原创 2018-09-13 19:03:42 · 150 阅读 · 0 评论 -
算法练习bat----------04荷兰国旗问题
给定一个无序数字,小于num放左边,等于num放中间,大于num放右边,要求空间复制度O(1),时间复杂度O(n)实际上就三种情况:(使用less表示数组-1,more表示数组length,cur表示当前位置)① 当数字小于num,less的下一个和cur交换,cur++(也就是下面的swap(arr, ++less, l++);)②当数字等于num,cur++③当数字大于num,...原创 2018-09-10 22:32:29 · 113 阅读 · 0 评论 -
算法练习bat----------05快速排序和改进的快排和随机快排
普通快排,最差情况下为时间复杂度O(N^2)随机快排,最差情况下为时间复杂度O(N*logN),最好空间复杂度O(logN),最差O(N)原始快排:将数组最后一个变量假设为X,小于等于X的放左边,大于X的放右边,然后再将拍好序的左边和右边分别再重复刚刚的动作改进快排:将数组最后一个变量假设为X,小于X的放左边,等于X的放中间,大于X的放右边,这样的好处是中间排好序的X不用动 p...原创 2018-09-11 20:05:57 · 147 阅读 · 0 评论 -
算法练习bat----------03小和问题
小和问题:在一个数组中,每一个数左边比右边的数小的数累加起来,叫做这个数组的小和例子:[1,3,4,2,5]1左边比1小的数,没有:3左边比3小的数,1;4左边比4小的数,1,3;2左边比2小的数,1;5左边比5小的数,1,3,4,2;所以小和为1+1+3+1+1+3+4+2=16;1.常规求解:两个for循环,每次取出对应的值,遍历比较,O(n^2)...原创 2018-08-24 20:22:01 · 216 阅读 · 0 评论 -
算法练习bat----------01插入排序
默认从第一位开始从后往前比较,例如第一次比较从a[1]和a[0]位比较插入,第二次从a[2]到a[0]开始比较插入,一直到从最后一位往前比较插入public static void insertionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } ...原创 2018-08-24 19:23:27 · 120 阅读 · 0 评论 -
算法题目---------------03转圈打印矩阵(切割矩形),正方形旋转90度,之字型打印矩阵,行和列都排好序找数
给定左上角和右下角坐标,将矩阵切割成一个个小矩形,依次遍历输出,注意有可能e同行或同列的情况public static void spiralOrderPrint(int[][] matrix) { int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = matrix[0].length - 1; whil...原创 2018-09-13 21:45:59 · 273 阅读 · 0 评论