Java实现七大排序(一)

目录

一.插入排序

1.直接插入排序

2.希尔排序

二.选择排序

1.选择排序

2.堆排序

三.总结


一.插入排序

1.直接插入排序

直接插入排序的原理与线下玩扑克牌类似。我们拿到一张牌后要排序,方法就是一张一张对。直接插入排序也是这样的,我们得到一张“牌”,从后往前对比,如果“牌”比刚得到的“牌”大就继续往前找,如果“牌”比刚得到的要小就插在它的后面。

//直接插入排序public static void insetSort(int[] array){for(int i=1;i<array.length;i++){//从前往后遍历int j=i-1;int tem=array[i];   //当前i的值for(;j>=0;j--){if(array[j]>tem){//如果比tem大就继续往前找array[j+1]=array[j];}else{//如果比tem小就插在j的后面,也就是j+1的位置array[j+1]=tem;break;}}//如果找到头都没找到,说明其实最小的array[j+1]=tem;}}

特性:当数组越有序,时间效率越高。

2.希尔排序

又名缩小增量排序。希尔排序是直接插入排序的优化,其时间复杂度最坏就是直接插入排序。思路是先分小组,组内排序;再分组,但组内元素增多,组内排序,直到最后只分1组,这时再进行排序就有序了。

首先我们要解决这么分组的问题。

如图,正常我们想到的是第一种分组,将连续的几个元素分成一组。但希尔排序用的是第二种,定义一个gap,让前一个加上一个gap找到第二个。

前面说了希尔排序是直接插入排序的优化,其代码和直接插入排序极其相似。

    //希尔排序public static void shellSort(int[] array){int gap=array.length/2;//分组while(gap>1){gap=gap/2;shell(array,gap);}}//直接插入排序的变种private static void shell(int[] array, int gap) {for(int i=gap;i<array.length;i++){int j=i-gap;int tem=array[i];for(;j>=0;j-=gap){if(array[j]>array[j+gap]){array[j+gap]=array[j];}else{array[j+gap]=tem;break;}}array[j+gap]=tem;}}

二.选择排序

1.选择排序

选择排序的原理很简单,从前到后遍历每一个元素,再遍历这个元素后面的元素,找到后面比该元素更小的元素,交换其位置即可。

 public static void selectSort(int[] array) {for (int i = 0; i < array.length; i++) {int mindIndex = i;for (int j = i+1; j < array.length; j++) {if(array[j] < array[mindIndex]) {mindIndex = j;}}swap(array,i,mindIndex);}}

这种方式排序比较慢,我们可以对其进行优化,优化思路:同时排序大值和小值。

public static void SelectSortOptimize(int[] array){int left=0;int right=array.length-1;while(left<right){int minIndex=left;int maxIndex=left;for (int i = left+1; i <= right; i++) {if(array[i]>array[maxIndex]){maxIndex=i;}if(array[i]<array[minIndex]){minIndex=i;}}swap(array,left,minIndex);if(maxIndex==left){//因为left已经被minIndex换走了maxIndex=minIndex;}swap(array,right,maxIndex);left++;right--;}}

2.堆排序

在堆排序中,要想升序排序要大根堆,要降序需要小根堆。思路:定义一个引用指向堆的最后一个元素,将堆顶元素与指向元素交换,然后指向向前移动,将堆顶元素进行向下调整。

public static void heapSort(int[] array){createHeap(array);for(int i=array.length-1;i>0;i--){swap(array,0,i);siftdown(array,0,i);}}

三.总结

排序方法最好平均最坏空间复杂度稳定性
直接插入排序O(n)O(n^{2})O(n^{2})O(1)稳定
希尔排序O(n)O(n^{1.3-1.5})O(n^{2})O(1)不稳定
选择排序O(n^{2})O(n^{2})O(n^{2})O(1)不稳定
堆排序O(n*log(n))O(n*log(n))O(n*log(n))O(1)不稳定

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

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

相关文章

虚拟机迁移报错:虚拟机版本与主机“x.x.x.x”的版本不兼容

1.虚拟机在VCenter上从一个ESXi迁移到另一个ESXi上时报错&#xff1a;虚拟机版本与主机“x.x.x.x”的版本不兼容。 2.例如从10.0.128.13的ESXi上迁移到10.0.128.11的ESXi上。点击10.0.128.10上的任意一台虚拟机&#xff0c;查看虚拟机版本。 3.确认要迁移的虚拟机磁盘所在位…

java28-SpringMVC

概述 Spring框架是分层的全栈式的轻量级开发框架&#xff0c;以IOC和AOP为核心&#xff0c;地址https://spring.io/ 组成 Data Access/Integration&#xff08;数据访问/继承&#xff09; JDBC模块&#xff1a;提供一个JDBC抽象层&#xff0c;大幅度减少了在开发中对数据库…

【Webpack】HMR 热更新

HMR全称Hot Module Replacement&#xff0c;可以理解为模块热替换&#xff0c;指在应用程序运行过程中&#xff0c;替换、添加、删除模块&#xff0c;而无需重新刷新整个应用。 不使用热更新&#xff0c;我们在应用运行过程中修改了某个模块&#xff0c;通过自动刷新会导致整个…

MySQL--索引(3)

1.索引创建注意点 选择合适的字段 1.不为 NULL 的字段 索引字段的数据应该尽量不为 NULL&#xff0c;因为对于数据为 NULL 的字段&#xff0c;数据库较难优化。如果字段频繁被查询&#xff0c;但又避免不了为 NULL&#xff0c;建议使用 0,1,true,false 这样语义较为清晰的短值或…

Vue--解决error:0308010C:digital envelope routines::unsupported

原文网址&#xff1a;Vue--解决error:0308010C:digital envelope routines::unsupported_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决node.js在运行Vue项目时的报错&#xff1a;error:0308010C:digital envelope routines::unsupported。 问题描述 使用node.js运行Vu…

力扣3226 使两个整数相等的位更改次数

写的代码&#xff1a; class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…

机器人开源调度系统OpenTCS-6最新版本地源码运行

OpenTCS 项目使用 Gradle 而不是 Maven&#xff0c;那么需要使用 Gradle 来导入和构建项目。在 IntelliJ IDEA 中导入和运行使用 Gradle 的项目&#xff0c;可以按照以下步骤进行操作&#xff1a; 克隆 OpenTCS 源码 首先&#xff0c;克隆 OpenTCS 的源码到本地。您可以使用以…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

ASP.NET中的六大对象有哪些?以及各自的功能以及使用方式

在ASP.NET Web Forms中&#xff0c;并没有严格意义上的“六大对象”&#xff0c;但通常我们指的是与HTTP请求和响应处理紧密相关的几个内置对象。以下是这些对象及其功能、使用方式以及简单的实现源码示例&#xff1a; Response对象 功能&#xff1a;用于向客户端发送HTTP响应…

UWB实操:使用 litepoint 测线损 pathloss

使用 litepoint 测线损 pathloss 把信号线接到 litepoint 的RF1 和RF2。 注意: RF1 支持 VSG(TX) 和VSA(RX)RF2 只支持 VSG(TX)同一时间只能一个 VSG(TX)双击 LED STATUS,改变RF1和RF2的模式。 RF1:VSA(RX) RF2:VSG(TX) Technology选择GPRF

cf场+线性dp

Problem - B - Codeforces 思路&#xff1a; 这其实是一道数学题&#xff08;最开始一直在枚举&#xff0c;服啦&#xff09; 我们的目的是求最大利润 当a>b是时直接令k0,利润n*a即可 当a<b时存在两种情况&#xff1a; 1.b-a>n即所有b-i1的情况都>a&#xff0…

掌握Python:三本不可错过的经典书籍

强烈推荐Python初学者用这三本书入门! Python3剑客 一、《Python编程从入门到实践》 这本书适合零基础的Python读者&#xff0c;旨在帮助他们快速入门Python编程&#xff0c;并达到初级开发者的水平。书中深入浅出地介绍了Python的基础概念&#xff0c;如变量、循环、函数等…

【BUG】已解决:ModuleNotFoundError: No module named ‘tensorboard‘

ModuleNotFoundError: No module named ‘tensorboard‘ 目录 ModuleNotFoundError: No module named ‘tensorboard‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

爬虫学习4:爬取王者荣耀技能信息

爬虫&#xff1a;爬取王者荣耀技能信息&#xff08;代码和代码流程&#xff09; 代码 # 王者荣耀英雄信息获取 import time from selenium import webdriver from selenium.webdriver.common.by import By if __name__ __main__:fp open("./honorKing.txt", "…

主机加固,如何重塑产线工控安全的防勒索病毒生态

在数字化转型的浪潮中&#xff0c;企业信息安全面临着前所未有的挑战&#xff0c;尤其是针对主机层面的攻击手段愈发狡猾。MCK主机加固系统&#xff0c;作为新一代主机安全防护方案&#xff0c;凭借其独步业界的内核级签名校验技术和深度学习驱动的业务场景白名单策略&#xff…

【C++】马蹄集02 自守数II

输入正整数N&#xff0c;检查该数是否为自守数输出YES或者NO。当且仅当一个数的平方以与该数相同的数字结尾时该数称为自守数。 格式 输入格式&#xff1a;输入正整数N 输出格式&#xff1a;输出YES或者NO 样例1 输入&#xff1a;76 输出&#xff1a;YES 代码 利用substr…

Cookie Session Token

Cookie (小型文本文件) 存储位置&#xff1a; 客户端&#xff08;浏览器&#xff09;中的 Cookie。 工作原理&#xff1a; 登录&#xff1a;用户提交登录表单&#xff0c;服务器验证凭证&#xff08;如用户名和密码&#xff09;。 设置 Cookie&#xff1a;服务器在响应中设置…

Win10环境将Docker部署到非系统盘

Win10环境将Docker部署到非系统盘 目录 Win10环境将Docker部署到非系统盘 一、Docker官网客户端Docker Hub下载 二、windows环境的安装 三、正确的迁移步骤 3.1、确保你的系统分区至少3G的剩余空间&#xff1b; 3.2、默认方式安装Docker hub&#xff1b; 3.3、打开Dock…

2024年钉钉杯大数据竞赛的赛题

钉钉杯的含金量是相当大的&#xff0c;这个证书在多个方面都具有较高的价值。以下是对其含金量和证书有用性的详细分析&#xff1a; 含金量分析 国家级竞赛地位&#xff1a; 钉钉杯大数据挑战赛是由阿里巴巴旗下钉钉举办的全国大数据比赛&#xff0c;已被众多高校认定为国家C…