日撸 Java 三百行day50

news2024/11/24 12:41:46

文章目录

  • 说明
  • day50 小结
    • 1.比较分析各种查找算法.
    • 2.比较分析各种排序算法
    • 3.描述各种排序算法的特点和基本思想
    • 4.设计一个自己的 Hash 函数和一个冲突解决机制

说明

闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-CSDN博客
自己也把手敲的代码放在了github上维护:https://github.com/fulisha-ok/sampledata

day50 小结

1.比较分析各种查找算法.

排序算法平均时间复杂度最坏时间复杂度最好时间复杂度
顺序查找O(n)O(n)O(1)
折半查找O(log2n)O(log2n)O(log2n)
哈希表法O(1)O(1)O(1)
  • 顺序查找,比较简单,从数据第一个元素开始逐个比对。再排序中引入了“哨兵”的概念,哨兵可以避免进行不必要的判断。
  • 折半查找相比顺序查找快了一点,它是基于分治思想的查找算法。折半查找可以对比二叉排序树,但使用折半查找是要求给出的数据必须是有序的。我觉得可以结合排序算法来使用这个折半查找算法
  • 哈希算法比前面两种查找都快,因为是通过函数映射的,当需要查找一个元素时,只需要通过哈希函数计算出它的索引位置,然后在该位置上查找即可,但是关键就是映射函数如何设计和如何处理冲突。哈希表的时间复杂度取决于哈希函数的效率和哈希表的装填因子(我上面写的时间复杂度是再比较理想的情况下:哈希函数的效率高、装填因子低时),如果哈希函数效率低,装填因子高就另说了。

2.比较分析各种排序算法

类型排序算法平均时间复杂度最坏时间复杂度最好时间复杂度 空间复杂度稳定性
插入排序直接插入排序O(n2)O(n2)O(n)O(1)稳定
希尔排序O(nlog2n)O(n2)O(n1.3)O(1)不稳定
交换排序冒泡排序O(n2)O(n2)O(n)O(1)稳定
快速排序O(nlog2n)O(n2)O(nlog2n)O(nlog2n)不稳定
选择排序选择排序O(n2)O(n2)O(n2)O(1)不稳定
堆排序O(nlog2n)O(nlog2n)O(nlog2n)O(1)不稳定
归并排序归并排序O(nlog2n)O(nlog2n)O(nlog2n)O(n)稳定
  • 在实现排序算法的过程种,要注意数组存储的起始索引值是从0还是1开始
  • 不同类型的排序实现方式是不同的,交换类和选择类排序在每一趟排序后都会确定一个数据的最终位置

3.描述各种排序算法的特点和基本思想

  • 直接插入排序
    每一趟排序,把待排序数据插入到已排好序的数据中,在这个过程中就需要比较数据(待排序数据和已排好序数据进行比较)找到合适的插入位置,并移动数据。虽然直接插入排序在的时间复杂度比较高,但数据量小的时候,它排序算法也挺高的,而且他不需要额外的存储空间,算法也比较稳定。

  • 希尔排序
    希尔排序是插入排序的改进,当数据基本有序时用插入排序是较优的,希尔排序每一趟排序则是按一个步长分组进行插入排序(这样移动数据的次数减少了),每一趟排序后数据都逐渐有序,当最后步长为1时,则和插入排序一样,但是这时的数据基本有序。但希尔排序对步长的选择很关键,这会影响他时间复杂度。

  • 冒泡排序
    冒泡排序,就是把最大(最小)的数据往“上”冒,冒得过程则是和相邻元素两两比较,根据排序规则进行交换数据。在待排序数据较大的情况下,冒泡排序应该不是首选,他的平均时间复杂度比较高。

  • 快速排序
    快速排序也需要比较数据,但不是和冒泡排序一样相邻元素两两比较,而是和一个基准值比较,并且是从数据两边交替比较,根据排序规则进行交换数据。在确定一个数据位置就会有左右之分,左右又可以采用通样的方法(递归)。相比于其他排序算法,快速排序是一种高效的排序算法,在大规模数据时,快速排序是一个不错的选择。

  • 选择排序
    在未排序数据中找到最大(最小)元素,将数据依次放到已排序数据后(前)。这个过程中要去比较数据找到数据。选择排序的时间复杂度与数据的大小和数据分布无关,所以选择排序的性能不怎么样。所以数据量大的时候不是首选

  • 堆排序
    堆排序借助大(小)顶堆的特点,大(小)顶堆又和完全二叉树很相似,所以堆排序和树有关,重点是要建堆和调整堆。

  • 归并排序
    归并排序(基于分治思想)将待排序数据进行分组,如二路归并,将两个有序序列归并为一个有序序列。

4.设计一个自己的 Hash 函数和一个冲突解决机制

我设计的Hash函数采用的是直接寻址法,而解决冲突的办法是拉链法。在设计Hash函数时,我设计的思路参考了图中的领接表,我认为他的数据结构和这个拉链法很相似,由数组加链表结合。如下是自己写的代码并通过测试:

package datastructure.search;

/**
 * @author: fulisha
 * @date: 2023/5/12 13:51
 * @description:
 */
public class Hash {
    //链表的结构
    class HashNode {
        int column;
        HashNode next;
        public HashNode(int paraColumn) {
            column = paraColumn;
            next = null;
        }
    }

    int length;
    HashNode[] data;

    public Hash(int[] paraArray,int paraLenght) {
        length = paraLenght;
        data = new HashNode[paraLenght];
        HashNode tempNode,tempPreviousNode;
        int tempPosition;

        //采用直接地址法构造hash函数 并用拉链法解决冲突
        for (int i = 0; i < paraLenght; i++) {
            data[i] = new HashNode(i);
            tempPreviousNode = data[i];
            for (int j = 0; j < paraArray.length; j++) {
                tempPosition = paraArray[j] % paraLenght;
                //,我对取模值相同的在外层一个for一次搞定
                if (tempPosition == i) {
                    tempNode = new HashNode(paraArray[j]);
                    tempPreviousNode.next = tempNode;
                    tempPreviousNode = tempNode;
                }
            }
        }

        //打印输出链表法的值
        HashNode hashNode;
        for (int i = 0; i < paraLenght; i++) {
            hashNode = data[i];
            String hashString = " ";
            while (hashNode != null) {
                hashString = hashString + " " + hashNode.column ;
                hashNode = hashNode.next;
            }
            System.out.println(hashString);
        }
    }

    public static void main(String args[]) {
        int[] tempUnsortedKeys = { 16, 33, 38, 69, 57, 95, 86 };
        Hash hash = new Hash(tempUnsortedKeys, 8);
    }

}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用PostgreSQL的存储过程为多个库表增加固定字段

曾经只会增删改查和内置函数的SQL使用&#xff0c;第一次发现原来自定义函数/存储过程还是非常可以提高效率的。 背景需求&#xff1a; 需要为某个schema下的表追加字段。 原始手段&#xff1a;为每个表生成插入字段的SQL&#xff0c;执行&#xff0c;要粘贴好多遍表名 / 手…

【K8S系列】快速初始化⼀个最⼩集群

序言 走得最慢的人&#xff0c;只要不丧失目标&#xff0c;也比漫无目的地徘徊的人走得快。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级重要蓝色&#xff1a;用来标记二级重要 希望这篇文章能让你不仅有…

华为OD机试真题 Java 实现【贪心的商人】【2023Q1 100分】

一、题目描述 商人经营一家店铺&#xff0c;有number种商品&#xff0c;由于仓库限制每件商品的最大持有数量是item[index]&#xff0c;每种商品的价格在每天是item_price[item_index][day]&#xff0c;通过对商品的买进和卖出获取利润&#xff0c;请给出商人在days天内能获取…

扫雷---C语言

目录 前言&#xff1a; 1.认识扫雷 1.1游戏构思 1.2碎碎念 2.扫雷接口实现 2.1菜单打印 2.2创建标识符常量和初始化数组 2.3打印棋盘 2.4随机埋雷 2.5排查雷 3.源码 3.1头文件和函数原型声明game.h 3.2游戏函数实现game.c 3.3测试代码文件test.c ❤博主CSDN:啊…

HEVC编码标准介绍

视频编码标准的发展历程 目前已经有H266、AVS3、AV1等新编码标准。 H264的编码劣势 宏块个数的爆发式增长&#xff0c;会导致用于编码宏块的预测模式、运动矢量、参考帧索引、量化等宏块级参数信息所占用的码字过多&#xff0c;用于编码残差部分的码字明显减少&#xff1b;…

C++实现并查集

1.并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个 单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一 个元素归属于那个集合的运算。适合于描述这类…

编译原理----词法分析设计

程序设计实验1 词法分析 一、实验目的&#xff1a; 通过设计编制调试一个具体的词法分析程序&#xff0c;加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 二、实验内容 编制一个单词获取程序&#xff0c;从文件…

门店销售干货 | 4种不同类型的顾客VS销售技巧,直接套用!

“我就路过随便看看” “我在别人家看到的更便宜” “我自己看&#xff0c;你不要跟着我” “我下次再买” …… 在日常的门店经营过程中&#xff0c;你是否经常遇到不同类型的顾客&#xff0c;用各种不同的话拒绝你&#xff0c;最后成交的寥寥无几。 面对不同这样不同类型…

java异常总结

java异常总结 什么是异常&#xff1f; 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常。 常见异常举例 1.算数异常ArithmeticException public class Test{public static void main(String[] args) {System.out.println(10/0);} }报错 ArithmeticExcept…

webhub123整理 中文语音识别数据集​

我们收集和整理了常用的中文语音识别数据集&#xff0c;合计超过12000小时的数据集。已经按照不同来源整理收录到 webhub123整理 中文语音识别数据集​https://www.webhub123.com/#/home/detail?projectHashid64335220&ownerUserid22053727 整理后的效果如下 ​ 每个卡片…

mysql Lock wait timeout exceeded; try restarting transaction

文章目录 一、mysql死锁及超时的原因二、mysql死锁排查思路1、show full processlist 查询当前数据库全部线程2、information_schema 一、mysql死锁及超时的原因 当在业务逻辑中看到这个错误&#xff0c;或者mysql中使用update语句更新数据报错&#xff1a; Lock wait timeout…

数影周报:丰田215万名日本客户信息被无意泄露,菜鸟将于明年初在港IPO

本周看点&#xff1a;丰田215万名日本客户信息被无意泄露&#xff1b;美光宣布吴明霞出任美光中国区总经理&#xff1b;谷歌将向Gmail用户提供暗网数据泄露报告&#xff1b;淘宝天猫集团架构调整完成&#xff1b;菜鸟计划于2024年初在香港IPO...... 数据安全那些事 丰田215万名…

体验了基于ChatGPT的谷歌翻译插件后,我把其他翻译插件移除了

最近&#xff0c;一个基于 ChatGPT 的谷歌浏览器翻译插件挺火的&#xff0c;我体验了下&#xff0c;总结下来就一个字“666”。 github 上已经有 14.9k 的 star 了 传送门&#xff1a;GitHub - yetone/openai-translator: 基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端…

AI学术界无人后继?高校毕业生纷纷进厂,全是香饽饽

来源 | 新智元 微信号&#xff1a;AI-era 【导读】近日&#xff0c;有外媒对一批美国名校的大学生和教授进行了采访。结果显示&#xff0c;高校毕业生入职科技公司已成主流。 AI火&#xff0c;搞AI的人就火。 这不&#xff0c;据Insider最近的一次采访报道&#xff0c;科技类…

Vue3-黑马(五)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-axios-拦截器 &#xff08;2&#xff09;vue3-基础-条件与列表 &#xff08;3&#xff09;vue3- 基础-监听器 &#xff08;1&#xff09;vue3-基础-axios-拦截器 我们自己创建axios对象有一个好处&#xff0c;就是可以…

[译] Flutter 3.10 的新功能

[译] Flutter 3.10 的新功能 原文 https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73 无缝的Web和移动端集成&#xff0c;Impeller稳定版的突破性图形性能&#xff0c;以及更多 欢迎使用Flutter 3.10&#xff01;我们非常期待展示我们令人惊叹的Flutter社区所…

java可视化开发工具好用不好用?

java可视化开发工具到底好用不好用&#xff1f;这是不少粉丝朋友经常询问到的一个问题。在数字化发展趋势越发明显的当下&#xff0c;java可视化开发工具可以帮助各中大型企业实现转型升级&#xff0c;它的灵活、简洁、易操作、可视化等功能优势&#xff0c;让很多客户朋友欣慰…

OLYMP‘ARTS 2023奥艺大会中国推介会在北京盛大举行

北京时间2023年5月11日16时&#xff0c;以“艺术连接世界”为主题的OLYMPARTS 2023 国际奥艺大会中国推介会在北京盛大举行。此次活动由国际奥艺委员会&#xff08;WOAC&#xff09;指导支持&#xff0c;共邀请了国外驻华机构、文旅部、央国企、国内外协会机构、知名艺术家代表…

【项目源码】智慧班牌源码 家校互联小程序源码 智慧校园云平台

智慧校园平台源码 智慧班牌源码 人脸识别技术 电子班牌源码 家校互联小程序源码 源码开发环境&#xff1a;Javaspringbootvueelement-uimysql 智慧校园系统定位于中小学教育学校&#xff0c;侧重实际应用&#xff0c;讲究实际&#xff0c;突出加强校园安全监管&#xff0c;德…

【数值模型系列】CMAQ全局属性修改

一、问题产生 在做一个月的浓度预测时&#xff0c;由于GFS只能预报16天左右&#xff0c;因此需要使用CFS气象数据来驱动WRF模型&#xff0c;但CFS在WRF4.x版本有问题&#xff0c;因此重新装了WRF3.9.1版本的WRF。 而我这里的CMAQ ICON会去取前一天的CCTM CONC制作新的ICON文件…