排序
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 · 109 阅读 · 0 评论 -
算法题目---------------02使用队列实现栈,使用栈实现队列
使用两个队列,往其中一个队列进队,假设进入N个数,那么如果要出栈,则将N-1个数复制到另一个队列,剩下的那个就是出栈的数 使用栈实现队列,将数据放入一个栈,若要实现队列的先进先出,则将所有的数据放入另一个栈,依次出栈即可 约束条件: 若要放入的另一个栈中有元素,则不能倒数据进入 每次倒数据,要把数据倒完 public void dao(){ if(!stackPop....原创 2018-09-13 21:12:43 · 259 阅读 · 0 评论 -
算法题目---------------01.实现一个特殊的栈,在栈的基本功能上,在实现返回栈中最小的元素
要求: pop,push,getMin操作时间复杂度为O(1) 设计的栈类型可以使用现成的栈结构 设计两个栈,data中不用管,只需要入栈,当data中入栈,则min中做比较, 如果min中没有,则直接入栈, 若有则用min中的栈顶的元素和data中入栈的元素进行比较, 若min中栈顶比较小,则向min中压入当前min栈顶中的元素,若min栈顶中的元素比较大,则压入data中刚刚入栈...原创 2018-09-13 20:48:40 · 405 阅读 · 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 · 217 阅读 · 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 · 171 阅读 · 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 · 165 阅读 · 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 · 140 阅读 · 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 · 161 阅读 · 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 · 251 阅读 · 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 · 152 阅读 · 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 · 279 阅读 · 0 评论