![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刘得很的数据结构和算法
我叫刘日天
这个作者很懒,什么都没留下…
展开
-
基数排序(java实现)
基础思路:(用空间换时间)1.首先有10个桶,因为用的是十进制数2.每一趟呢就按位数的值i存在第i个桶里,然后再取回原数组3.会有多少趟?看最大数的位数,假如最大数为345此时最大位数n=3,有3趟来看看动图分析看代码详解: public static void jishu(int nums[]){// 求最大数 int max=nums[0]; for (int i = 1; i < nums.length ; i+...原创 2021-12-03 21:20:05 · 327 阅读 · 0 评论 -
归并排序(java实现)
基本思路:1.整体分为分 - 治2.分,怎么分?通过递归向下分,到只有两个数比较为止3.治,如何治?递归回溯向上合并,在分到最底部开始, a.比较两个数大小,并使用一个临时数组temp临时储存 b.如果两个序列(最少有1个值)比较完,一方序列还有值,就将剩余的全部放到临时数组temp c.将临时数组的值再copy到原数组上图:下面这张图是回溯上去后最后一次合并,并不是只有一次合并再来看上图,这次排序其实有数组长度-1次合并,分别是8 4,5 7,1 3,...原创 2021-12-02 20:59:44 · 844 阅读 · 3 评论 -
插入排序(java实现)
基础思路: 1.将整个数组分为两个分区,left有序区,和right无序区 2.左分区的数跟右分区一个一个比较,小于左分区,就左分区比较的那个值向后挪动 3.循环结束证明右分区的值大于左分区,此时leftindex+1才是插入的下标位置动图演示:代码如下: public void insert(int nums[]){ for (int j = 1; j <nums.length; j++) {//定义右边无序...原创 2021-11-27 18:10:46 · 171 阅读 · 0 评论 -
希尔排序(java实现)
希尔是插入的一种优化算法,也叫缩小增量法基础思路:a.不断分组分到最后一组再进行其他排序 b.分组不断/2,直到为1图示如下:我们再来看看动图:代码如下: public void winxier(int num[]){// 跟插入排序区别不大,外面加了个循环分组// 分组 for (int fenzhu = num.length/2; fenzhu >0 ;fenzhu/=...原创 2021-11-27 18:16:48 · 174 阅读 · 0 评论 -
冒泡排序(java实现)
抽象理解就像是,像泡泡一样把大的往后冒话不多说直接上代码public static void sortwin(int a[]){ int zhuan=0;// 标记后面一轮是否有过交换 boolean T=false;// 所有论 for (int j = 0; j <a.length-1; j++) {// 一轮循环 for (int i = 0; i <a.length-1-j ; i++) ...原创 2021-11-27 17:57:11 · 487 阅读 · 1 评论 -
简单选择排序
跟冒泡有丢相似的地方,冒泡大的往后冒,选择是小的往前选,外循环表示交换多少轮,内循环表示找到最小值,两次循环时间复杂度为O(n^2)思路:(1)有数组大小-1轮排序(2)每一轮排序又会通过循环找到一个最小值(3)如第一轮找到最小值(1--length)与第一个值a[0]交换,第二轮排序就从(2--length)里找最小值,找到后与a[1]交换(4)初始化时定义一个最小值和最小值下标 public static void winxuanzhe...原创 2021-11-27 18:03:05 · 152 阅读 · 0 评论 -
快速排序(java实现)
快速排序也是选择排序的一种,是冒泡排序的改进版基础思想:1.首先,会有一个基准值和一个左指针以及右指针2.指针跟基准值比较,小的放在基准值左边,大的放右边3.这样就会分成左边一个值小的分区和右边值大的分区4.使用递归重复1,2的操作,直到每一个小分区只有1个数据动图如下:看代码: public static void quicksot(int nums[],int left,int right){// 递归退出条件 if (le..原创 2021-11-29 20:10:52 · 422 阅读 · 0 评论