数据结构和算法——排序算法

目录

排序的分类:

内部排序:

插入排序:

直接插入排序:

希尔排序:

选择排序:

简单选择排序:

堆排序:

交换排序:

冒泡排序:

快速排序

归并排序:

基数排序:

外部排序:


时间复杂度和空间复杂度:

时间频度:语句执行的次数。

    int total = 0;int end = 100;for (int i = 1; i < end; i++) {total += i;}

写法:T(n)=n+1;语句执行了n+1次,因为最后判断一次使他退出,所以+1次。

当n值变大可以忽略:忽略常数项。忽略低次项。

排序的分类:

内部排序:
插入排序:
直接插入排序:

代码:

public class InsertSort {public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 80000);}long startTime = System.currentTimeMillis();insertSort(arr);long endTime = System.currentTimeMillis() - startTime; // 0.3}public static void insertSort(int[] arr) {for (int i = 1; i < arr.length; i++) {int tmpNum = arr[i];int j = i - 1;while (j >= 0 && tmpNum < arr[j]) {arr[j + 1] = arr[j];j--;}if (j + 1 != i) {arr[j + 1] = tmpNum;}}}
}
希尔排序:

图片演示:

选择排序:
简单选择排序:

代码:

public class SelectSort {public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 80000);}long startTime = System.currentTimeMillis();selectSort(arr);long endTime = System.currentTimeMillis() - startTime;}public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}if (minIndex != i) {int tmpNum = arr[i];arr[i] = arr[minIndex];arr[minIndex] = tmpNum;}}}
}
堆排序:

在二叉树的基础上。

交换排序:
冒泡排序:

代码:

public class BubbleSort {public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 80000);}long startTime = System.currentTimeMillis();bubbleSort(arr);long endTime = System.currentTimeMillis() - startTime;}public static void bubbleSort(int[] nums) {for (int i = 0; i < nums.length - 1; i++) {boolean sortEd = true; // 已顺序排序for (int j = 0; j < nums.length - 1 - i; j++) {if (nums[j] > nums[j + 1]) {int tmp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = tmp;sortEd = false;}}if (sortEd) {return;}}}
}
快速排序
归并排序:
基数排序:

是桶排序的升级版。

排序算法的速度:希尔排序>插入排序>选择排序>冒泡排序

外部排序:

当数据量太大,无法全部加载到内存总时,需要借助外部存储进行排序。

参考视频:【尚硅谷】数据结构与算法(Java数据结构与算法)_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8spod就绪检查失败

pod 一直未就绪 kube-system metrics-server-7764f6c67c-2kts9 0/1 Running 0 10m kubect describe 查看 就绪探针未通过 Normal Started 3m19s kubelet Started container metrics-server Warning Unhealthy 5s (x20 over 2m55s) kubelet Readiness probe failed: HTTP probe…

ArcGIS: 第二届全国大学生GIS技能大赛(广西师范学院)详解-下午题

目录 01 题目 02 思路和实操 2.1 流域提取-思路 2.2 流域提取-实操 2.2.1 获取DEM ​编辑 2.2.2 水文分析-提取流域基于单出水口 2.3 河网分级-思路 2.4 河网分级-实操 2.4.1 提取河道网络 2.4.2 河网分级 ​编辑 2.5 子流域提取和处理-思路 2.6 子流域提取和处理-实…

HTML5的新增表单元素

HTML5 有以下新的表单元素: <datalist> <keygen> <output> datalist datalist 元素规定输入域的选项列表。 datalist属性规定 form 或 input 域应该拥有自动完成功能。当用户在自动完成域中开始输入时&#xff0c;浏览器应该在该域中显示填写的选项&…

前端-uniapp-开发指南

美团外卖微信小程序开发 uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端&#xff0c;学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并发请求 uni-app框架调用https接口 开发小程…

FPGA面试题(4)(跨时钟域处理)

跨时钟域处理方法 慢->快快->慢单bit在快时钟域同步打拍&#xff0c;将信号同步到快时钟域展宽后同步打拍多bit异步FIFO异步FIFO握手信号 一.打两拍 适用于单bit跨时钟域处理所谓的打两拍就是定义两级寄存器实现延时 那为什么是打两拍&#xff0c;不是打一拍&#x…

前端性能优化之防抖节流

前端性能优化之防抖&节流 1.什么是防抖和节流2.代码实现2.1 实现防抖2.2 实现节流 3.应用场景3.1 防抖的应用3.2 节流的应用 1.什么是防抖和节流 防抖和节流是前端开发中常用的两种性能优化技术。 为什么需要防抖和节流呢&#xff1f; 两者目的都是为了防止某个时间段内…

使用策略模式重构审批

之前在公司与同时合作开发了一个考核系统&#xff0c;最后干完后整个代码也是合在了我这里&#xff0c;于是进行了codereview&#xff0c;进行优化代码&#xff0c;在审核这边&#xff0c;我先是拆分了公共代码&#xff0c;然后对重复的代码块进行了封装&#xff0c;但是审核这…

面试总结(mysql定精度/oom排查/spring三级缓存/stream流)

Mysql数据类型上的一个把握 1、MySQL Decimal为什么不会丢失精度 DECIMAL的存储方式和其他数据类型都不同&#xff0c;它是以字符串形式存储的。假设一个字段为DECIMAL(3,0)&#xff0c;当我们存入100时&#xff0c;实际上存入的1、0、0这三个字符拼接而成的字符串的二进制值&…

计算机竞赛 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖&#xff0c;适合作为竞赛课题…

华为OD机考算法题:字符串划分

题目部分 题目字符串划分难度难题目说明给定一个小写字母组成的字符串s&#xff0c;请找出字符串中两个不同位置的字符作为分割点&#xff0c;使得字符串分成的三个连续子串且子串权重相等&#xff0c;注意子串不包含分割点。 若能找到满足条件的两个分割点&#xff0c;请输出…

c++ qt--线程(二)(第九部分)

c qt–线程&#xff08;二&#xff09;&#xff08;第九部分&#xff09; 一.线程并发 1.并发问题&#xff1a; ​ 多个线程同时操作同一个资源&#xff08;内存空间、文件句柄、网络句柄&#xff09;&#xff0c;可能会导致结果不一致的问题。发生的前提条件一定是多线程下…

MyBatis注解开发实现学生管理页面(分页pagehelper,多条件搜索,查看课程信息)

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …