排序算法(一)--桶排序、冒泡、快排(JAVA)

排序算法汇总

参考书籍–《啊哈!算法》 作者:啊哈磊

首先提出一个问题:班内有5名同学,成绩分别为5,8,2,4,2分(满分10分),需要将成绩从小到大排序

简化版 桶排序
时间复杂度O(N)

import java.util.Scanner;public class Bucket_sort {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();/*** 需要进行排序的数字范围在 0-5之间* */int[] a = new int[6];/*** 注意并非将数据存起来,而是在对应的“桶”内计数,最后统计出现次数* */for (int i = 0; i < n; i++) {int k = input.nextInt();a[k]++;}/*** 打印 内循环控制重复数据要重复读取* */for (int i = 0; i < 6; i++) {for (int j = 0; j < a[i] ; j++) {System.out.println(i);}}}
}

存疑一:这样成绩是按顺序存起来了,但是如果现在的情况是Lili 5分,Tony 8分,Joy 2分,Peter 3分,Ben 2分。如何在保证姓名和成绩对应的情况下排序呢??
另一方面,桶排序需要用到的“桶”的个数跟数据的最大值有关系,这里满分为10分只需要10个桶,但是如果数据量较少,但是数据的值较大的时候则会浪费大量空间。

冒泡排序算法
时间复杂度O(n^2)

import java.util.Scanner;public class Bubble_sort {public static void main(String[] args) {Scanner input = new Scanner(System.in);int[] a = new int[100];int n  =input.nextInt();/*** 输入n个数* */for (int i = 0; i < n; i++) {a[i] = input.nextInt();}/*** 冒泡排序核心算法* */for (int i = 0; i < n-1; i++) {for (int j = i+1; j < n; j++) {if (a[i] > a[j]) {int temp = a[i];a[i] = a[j];a[j] = temp;}}}/*** 打印* */for (int i = 0; i < n; i++) {System.out.print(a[i] + " ");}}
}

上面的冒泡排序为基本的算法,若想解决存疑一,只需要稍加变通即可实现

存疑二:冒泡排序解决了桶排序浪费空间的难题,但是这种排序算法采用双重循环,时间复杂度为指数级别,效率实在是不够好,有没有可以更快捷的方法呢?

快速排序
时间复杂度O(N·logN)

import java.util.Scanner;public class Fast_sort {static int n;static int[] a;public static void main(String[] args) {Scanner input = new Scanner(System.in);n = input.nextInt();a = new int[n];for (int i = 0; i < n; i++) {a[i] = input.nextInt();}fastsort(0, n-1);/*** 打印* */for (int i = 0; i < n; i++) {System.out.print(a[i] + " ");}}public static void fastsort(int left, int right) {if (left > right) {return;}int temp = a[left];int i = left;int j = right;/*** i == j 的时候为“一趟”结束的时候* */while (i != j) {/*** 顺序一定要从j开始,* a[j]如果不小于temp则前进,a[i]如果不大于temp则前进** */while (a[j] >= temp && i < j) {j--;}while (a[i] <= temp && i < j) {i++;}/*** 前进过程出现跳出while循环,则需要进行交换* */if (i < j) {int t = a[i];a[i] = a[j];a[j] = t;}}/*** 基准归位* */a[left] = a[i];a[i] = temp;/*** 处理左侧* */fastsort(left, i-1);/*** 处理右侧* */fastsort(i+1, right);}
}

通过快速排序就可以很好的解决存疑二中没有解决的问题了,这种排序算法在时间和空间上都得到了一个很好的利用。

再来一个问题:给出一串数字,这些数字没有顺序,而且还有许多重复的,我们需要完成排序和去重两个步骤
那么问题可以通过两种方法解决
1)先去重,后排序
解决思路:利用桶排序,在往“桶”中添加的时候,不采用a[i]++;,而是a[i] = 1;这样即使是重复的也不会多次计数了。
2)先排序,后去重
解决思路:可以利用冒泡和快排,由于排序完的序列,重复值都会在一个区间内,这样在输出的时候加个if判断即可实现。

存疑三:若是数据值十分巨大,该如何选择算法?
若数据量十分庞大,又该如何选择算法?

显然,对于数据值较大的题目,桶排序并不适合
而对于数据量较多的题目,冒泡排序要运行相当长的时间。所以快速排序真的是一个有效、方便的算法呢!!!

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

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

相关文章

apache启动错误 AH00072: make_sock: could not bind to address [::]:443

一、安装apche遇到问题 在电脑上win7系统中安装了wnmp&#xff08;nginxMySQLphp7.2&#xff09;后&#xff0c;想要在安装一套wamp&#xff08;apacheMySQLphp7.2&#xff09;。说做就做&#xff0c;wamp的安装就比较简单了&#xff1a;首先&#xff0c;直接下载apache的压缩包…

Page9:结构分解以及系统内部稳定和BIBO稳定概念及其性质[Linear System Theory]

内容包含系统能控性结构分解、系统能观测性结构分解以及系统结构规范分解原理&#xff0c;线性系统的内部稳定、BIBO稳定概念及其性质 转载于:https://www.cnblogs.com/ERFishing/p/10314720.html

Java集合类及常用数据结构

下面这个图示为JAVA的集合类关系图&#xff0c;没用用严格的UML&#xff0c;了解其中的关系即可&#xff0c;其中颜色强调的几个类为常用的集合类。

win7添加开机启动项

添加开机启动项 开始菜单->所有程序->有个“启动”目录&#xff0c;然后右击选择“打开”&#xff0c;之后把软件的快捷方式移动到此目录下&#xff0c;然后重启电脑&#xff0c;就可以了。 注意&#xff1a;如果修改了程序的安装目录&#xff0c;这里需要删除之前的快捷…

续PA协商过程

续PA协商过程 当sw3的接口恢复之后会发生2中情况。 ①sw3的G0/0/2口先发BPDU ②sw3的G0/0/3口先发BPDU sw3先发送BPDU sw3和sw1的交互过程&#xff1a; sw3的2口恢复后&#xff0c;sw3的所有接口&#xff08;除了边缘端口&#xff09;&#xff0c;变为DP&#xff08;discardi…

搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)

拯救同伴问题 问题描述&#xff1a;假设有如下迷宫&#xff0c;求解从某一点出发到目标位置的最短距离 Input: 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 Output: 7 深度优先搜索&#xff08;DFS&#xff09; import java.util.Scanner;public class DF…

PHP7.2的安装与配置(win7)

1、PHP的安装 1&#xff09;、环境安装目录&#xff1a; C:/wamp/|——php|——php7.2|——Apache24|——mysql|——www2&#xff09;、下载 linux专用&#xff1a;http://www.php.net/downloads.php windows专用&#xff1a;http://windows.php.net/download/ 官网里Windo…

常用类(二)

10.3 可变字符序列&#xff1a;字符串缓冲区 10.3.1 StringBuffer、StringBuilder、String的区别 1、一个类似于 String 的字符串缓冲区&#xff0c;但能被修改。虽然在任意时间点上它都包含某种特定的字符序列&#xff0c;但通过某些方法调用可以改变该序列的长度和内容&#…

搜索算法(二)--DFS/BFS求解炸弹人问题(JAVA )

炸弹人问题 问题描述&#xff1a;小人可以在迷宫中任意地方放置一个炸弹&#xff0c;炸弹可以在以该点为中心的十字方向杀死怪物&#xff0c;但是触碰到墙之后不再能传递攻击。求将一个炸弹放在哪个位置可以杀死更多的怪物&#xff1f;&#xff1f; Input&#xff1a; 13 1…

could not find driver和PDO drivers = no value

could not find driver 使用ThinkPHP5.0.20&#xff08;win7apache2.4.41 php7.2.21MySQL5.7&#xff09;连接MySQL数据库时&#xff0c;报错&#xff1a; 然后使用phpinfo();查看了一下扩展&#xff0c;发现了问题&#xff08;PDO drivers 的值为 no value&#xff09;&…

1090 Highest Price in Supply Chain (25 分)

1090 Highest Price in Supply Chain &#xff08;25 分&#xff09;A supply chain is a network of retailers&#xff08;零售商&#xff09;, distributors&#xff08;经销商&#xff09;, and suppliers&#xff08;供应商&#xff09;-- everyone involved in moving a …

搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )

宝岛探险问题 问题描述&#xff1a;某片海域有诸多岛屿&#xff0c;用0表示海洋&#xff0c;1-9表示陆地&#xff0c;现给定一个岛屿上的坐标点&#xff0c;求解所在岛屿的面积 思路&#xff1a;显然这是一个搜索算法&#xff0c;即只要从当前坐标点开始遍历&#xff0c;每遍…

win7上修改MySQL数据库密码

一、通过命令行方式修改MySQL密码 1、方法一&#xff1a;用mysqladmin 格式&#xff1a;mysqladmin -u用户名 -p旧密码 password 新密码 实例&#xff1a;mysqladmin -uroot -pabc password 123456 2、方法二&#xff1a;用set password 首先&#xff0c;登录MySQL数据库。…

Python爬虫从入门到放弃(二十)之 Scrapy分布式原理

原文地址https://www.cnblogs.com/zhaof/p/7306374.html 关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构&#xff0c;只在本机维护一个爬取队列&#xff0c;Scheduler进行调度&#xff0c;而要实现多态服务器共同爬取数据关键就是共享爬取队列。 这里重…

搜素算法(基础)--DFS/BFS算法(JAVA)

DFS、BFS的定义及C语言算法实现请参照 连通图遍历策略之深度优先搜索&#xff08;C语言&#xff09; 连通图遍历策略之广度优先搜索&#xff08;C语言&#xff09; 为了便于理解这里的数据是一个无向图&#xff0c;要求输出遍历顺序 下面只给出用例和算法&#xff0c;之后可…

TP中给select下拉框选中的内容搜索选中seleted

开发某个搜索功能时&#xff0c;在select下拉框选中条件后&#xff0c;单击搜索后总是重置下拉框条件&#xff0c;不能固定之前选中的条件。因此使用TP框架中的IF标签来实现。 代码如下&#xff1a; <select name"select_name" id"select_name"><…

python-入门

Python入门 阅读目录 一 编程与编程语言二 编程语言分类三 主流编程语言介绍四 python介绍五 安装python解释器六 第一个python程序七 变量八 用户与程序交互九 基本数据类型十 格式化输出十一 基本运算符十二 流程控制之if...else十三 流程控制之while循环十四 流程控制之for循…

图论算法(一)--最短路径的DFS/BFS解法(JAVA )

最短路径–城市路径问题&#xff1a; 问题描述&#xff1a;求从1号城市到5号城市的最短路径长度 Input&#xff1a; 5 8 1 2 2 1 5 10 2 3 3 2 5 7 3 1 4 3 4 4 4 5 5 5 3 3 Output&#xff1a; 9 DFS import java.util.Scanner; public class minPath {stati…

win7安装composer

一、下载安装包 二、安装 1、双击安装包进行安装 2、安装选项&#xff0c;点击next 3、选择php.exe的路径 4、选择并next 5、代理 6、准备安装 7、信息 8、安装成功 9、测试是否安装成功 10、安装位置 11、密钥位置 12、添加路径到环境变量 13、配置国内镜…

图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )

一、Dijkstra算法 问题描述&#xff1a;求一个点到任意个点的距离 思路&#xff1a;单源最短路径问题&#xff0c;使用Dijkstra算法 Input&#xff1a; 6 9 1 2 1 1 3 12 2 3 9 2 4 3 3 5 5 4 3 4 4 5 13 4 6 15 5 6 4 Output&#xff1a; 0 1 8 4 13 17 imp…