- 博客(7)
- 收藏
- 关注
原创 不用递归实现快速排序[精品必看]
快速排序不使用递归实现思路分析核心思想不改变,不采用递归,首先需要把节点分离出来,单路和双路核心算法抽取出来将快速排序的左右节点放入数组,由于普通数组长度限定,我们又不知道要分离多少次,所以需要手动扩容只需要判断节点数组是否为空即可快速排序基准点分离单路分离节点 /** * 单路排序节点分离 */ public static int ontWay(int[] arr, int start, int end) { int j = start;
2021-08-29 17:30:29 982
原创 三路快速排序
public class Test { public static void main(String[] args) { } // 三路分界 分为 小区 等区 大区 返回等区的范围 public int[] threeWay(int[] array, int start, int end) { // start 为基准值位置 int s = start; int e = end; int i = start
2021-08-29 16:04:22 108
原创 单路快速排序和双路快速排序
快速排序单路快速排序思路分析要求:将一组数据从大到小排序首先一组数据,我们以最右边的数作为基准数(用来比较的一个数)基准数左边采用快慢指针思想,快指针负责向前遍历基准数全部左边的数,并和基准数比较大小,慢指针负责快指针自己和基准值比较发现快指针的值小于基准数,那么慢指针就是用来和快指针交换;注意:慢指针是和快指针交换一次,向前移动一个,快指针一直向前移动当快指针走到基准数前一个,则慢指针和基准数交换这样完成之后,比基准数小的都放在了左边,然后慢指针为基准,慢指针左边和右边在执行上述过程第四步
2021-08-29 15:45:13 372
原创 选择排序不过如此
选择排序1. 动画演示1.2 思路分析第一个跟后面的所有数相比 ,如果小于(或大于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小(或者最大的)下标移动到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小(或第二大)的数重复以上步骤,知道指针移动到倒数第二位,确定倒数第二小(或倒数第二大)的数,那么最后一位也就确定了,排序完成1.3 复杂度分析1. 不管原始数组是否有序,时间复杂度都是O(n2),因为没一个数都要与其他数比
2021-08-29 15:44:34 88
原创 插入排序算法
插入排序1. 故事引入插入排序可以理解为兔子种萝卜,要求:小兔子把萝卜对应从小到大排起来,放在连续的坑里分析:首先小兔子站在第二个坑上,拿起来第二个坑的萝卜,这个时候小兔子看看自己站的这个坑的前一个坑的萝卜是不是比自己手里萝卜大(注意,小兔子是站在第二个坑上)小兔子发现比自己手里大,于是小兔子把前一个坑的萝卜,放在自己站的坑上,然后小兔子往前蹦跶一个坑,发现已经到了第一个坑就把萝卜放在站的坑里;还有种情况是小兔子还一种情况是小兔子发现自己手里的萝卜比前一个坑大,那么就是第三步,小兔子放下萝卜
2021-08-29 15:43:40 116
原创 冒泡排序迭代和递归版本,这里都有你想要的
冒泡排序迭代和递归版本,这里都有你想要的1. 动画演示2. 思路分析:2.1 外层循环控制总共比较次数,内层循环控制那两个数进行比较;比较时候只需要到arr.length - 1,防止越界2.2 相邻两个数两两比较 , arr[j]跟arr[j + 1] 比较,如果arr[j] < arr[j + 1],则两个进行交换2.2 j++,重复以上步骤,第一趟结束后,最大的数就被确定在最后一位,这就是冒泡排序,又称之为大(小)数沉底2.3 i++,重复以上步骤,直到 i = n - 1
2021-08-29 15:40:23 673
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人