Java编程:排序算法——选择排序

article/2025/9/30 15:20:22

基本介绍

选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。

选择排序思想:

选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0] ~ arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1] ~ arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2] ~ arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1] ~ arr[n-1]中选取最小值,与arr[i-1]交换,…, 第n-1次从arr[n-2] ~ arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

选择排序思路分析图:

在这里插入图片描述

选择排序应用实例:

有一群牛 , 颜值分别是 101, 34, 119, 1 请使用选择排序从低到高进行排序 [101, 34, 119, 1]

在这里插入图片描述

说明: 测试效率的数据 80000,看耗时
在这里插入图片描述

代码

package sort;import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;public class SelectSort {public static void main(String[] args) {//int[] arr = {101, 34, 119, 1,12,43,543};/*System.out.println("排序前:");System.out.println(Arrays.toString(arr));//selectSort1(arr);selectSort(arr);System.out.println("排序后:");System.out.println(Arrays.toString(arr));*/// 时间测试int[] arr = new int[80000];for (int i = 0; i < 80000; i++) {arr[i] = (int) (Math.random() * 80000);// 生成一个0-80000的数据}Date date1 = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String date1Str = simpleDateFormat.format(date1);System.out.println("排序前的时间为:" + date1Str);selectSort(arr);Date date2 = new Date();String date2Str = simpleDateFormat.format(date2);System.out.println("排序后的时间为:" + date2Str);}public static void selectSort(int[] arr) {// 再推导的过程中,我们发现了规律,因此可以使用循环解决// 选择排序的时间复杂度也是O(n²)int minIndex = 0, min = 0;for (int i = 0; i < arr.length - 1; i++) {minIndex = i;min = arr[i];for (int j = i + 1; j < arr.length; j++) {if (min > arr[j]) { // 说明假定的最小值并不是最小值min = arr[j];minIndex = j;   // 重置min和minIndex}}// 将最小值放在arr[i]的位置,两个值交换if (minIndex != i) {arr[minIndex] = arr[i];arr[i] = min;}}}// 选择排序public static void selectSort1(int[] arr) {// 使用逐步推导的方式// 第一轮// 原原始的数组:101, 34, 119, 1// 第一轮排序:1, 34, 119, 101// 算法:先简单→→→再复杂 把一个复杂的问题拆分为多个简单问题// 第1轮int minIndex = 0;int min = arr[0];for (int i = 0 + 1; i < arr.length; i++) {if (min > arr[i]) { // 说明假定的最小值并不是最小值min = arr[i];minIndex = i;   // 重置min和minIndex}}// 将最小值放在arr[0]的位置,两个值交换if (minIndex != 0) {arr[minIndex] = arr[0];arr[0] = min;}System.out.println("第1轮后:");System.out.println(Arrays.toString(arr));// 第2轮minIndex = 1;min = arr[1];for (int i = 1 + 1; i < arr.length; i++) {if (min > arr[i]) { // 说明假定的最小值并不是最小值min = arr[i];minIndex = i;   // 重置min和minIndex}}// 将最小值放在arr[1]的位置,两个值交换// 优化if (minIndex != 1) {arr[minIndex] = arr[1];arr[1] = min;}System.out.println("第2轮后:");System.out.println(Arrays.toString(arr));// 第3轮minIndex = 2;min = arr[2];for (int i = 2 + 1; i < arr.length; i++) {if (min > arr[i]) { // 说明假定的最小值并不是最小值min = arr[i];minIndex = i;   // 重置min和minIndex}}// 将最小值放在arr[2]的位置,两个值交换if (minIndex != 2) {arr[minIndex] = arr[2];arr[2] = min;}System.out.println("第3轮后:");System.out.println(Arrays.toString(arr));}
}

结论

80000个数据耗费时间2-3秒,比冒泡快。


http://chatgpt.dhexx.cn/article/DwKoZjJ3.shtml

相关文章

Java常用排序算法/程序员必须掌握的8大排序算法

本文由网络资料整理而来&#xff0c;如有问题&#xff0c;欢迎指正&#xff01; 参考链接&#xff1a;维基百科-排序算法 // 排序原始数据 private static final int[] NUMBERS {49, 38, 65, 97, 76, 13, 27, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15,…

排序算法:选择排序

1. 什么是选择排序&#xff1f;&#xff08;摘抄自百度百科&#xff09; 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。 它的工作原理是&#xff1a; 第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c…

排序算法——选择排序

目录 &#x1f43e;基本介绍 &#x1f31e;算法思想&#xff1a; &#x1f330;实例&#xff1a; ⛅思路分析&#xff1a; &#x1f308;总结&#xff1a; &#x1f6f4;代码实现: &#x1f6f9;算法性能分析 &#x1f355;时间复杂度 &#x1f367;空间复杂度 &…

基本算法-选择排序

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 本文介绍一种经典排序算法——选择排序&#xff0c;是入门级的排序算法之一。以下是本篇文章正文内容&#xff0c;包括算法简…

程序员八大排序算法之直接选择排序算法(java版)

一&#xff0c;选择排序算法思路&#xff1a;每趟选择序列的最小值/最大值&#xff0c;采取贪心选择策略。 二&#xff0c;选择排序算法有两种&#xff1a;1.直接选择排序 2.堆排序&#xff08;基于二叉树&#xff09;。 &#xff08;这里讲解直接选择排序&#xff09; 三&a…

排序算法--选择排序(Java实现)

选择排序概念 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理是&#xff1a;第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后再从剩余的未排序元素中寻…

java之选择排序

基本介绍 选择排序同样属于内部排序法&#xff0c;是从欲排序的数据中&#xff0c;按指定的规则选出某一元素&#xff0c;再按规定交换位置达到排序的目的。 排序思想 选择排序是一种简单的排序方法。它的基本思想是&#xff1a;第一次从arr[0]~arr[n-1]中选取最小值&#xf…

java选择排序(含选择排序代码)

目录 一&#xff1a;选择排序的思想 ​二&#xff1a;选择排序的代码 三&#xff1a;结果 一&#xff1a;选择排序的思想 选择排序是一种简单直观的排序算法。它的工作原理是&#xff1a;第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&…

选择排序算法

选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的工作原理是&#xff1a;第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;然后再从剩余的未排序元素中寻找到最小&…

Java——常见的几种排序算法

一、冒泡排序 每次冒泡过程都是从数列的第一个元素开始&#xff0c;然后依次和剩余的元素进行比较, 跟列队一样, 从左到右两两相邻的元素比大小, 高的就和低的换一下位置. 最后最高(值最大)的肯定就排到后面了. 但是这只是把最高的排到后面了, 还得找出第二高的, 于是又从第一…

Java实现选择排序

Java实现选择排序 选择排序原理为&#xff1a;随机确定一个标志位&#xff08;一般为第一个数字&#xff09;作为最小数&#xff0c;然后向后遍历&#xff0c;找到比标志位更小的数便与标志位互换位置并更新最小数&#xff0c;实现步骤为&#xff1a; 将数组的第一个数字设置…

【算法】选择排序法

一、介绍 1.选择排序法是将序列分为两段&#xff0c;有序前列和无序后列&#xff0c;每次查找无序后列中最大元素&#xff0c;将其插入到有序前列的最末尾处&#xff0c;直至无序后列最后一个元素&#xff0c;最终排序后的序列为降序序列 2.适用于包括数组和向量在内的序列 …

选择排序的两种算法(Java代码实现)

目录 选择排序&#xff1a; 基本思想&#xff1a; 1&#xff1a;简单选择排序&#xff1a; 基本思想&#xff1a; 过程&#xff1a; 2&#xff1a;堆排序&#xff1a; 基本思想&#xff1a; 过程&#xff1a; 选择排序&#xff1a; 基本思想&#xff1a; 每一趟从待排序…

Java选择排序

1. 选择排序 选择排序是一种简单直观的排序算法&#xff0c;其基本原理是每一次从待排序的数组里找到最小值&#xff08;最大值&#xff09;的下标&#xff0c;然后将最小值&#xff08;最大值&#xff09;跟待排序数组的第一个进行交换&#xff0c;然后再从剩余的未排序元素中…

数据仓库理论知识

数据仓库 1.1 数仓基础知识 1.1.1. 为什么要有数据仓库 通常数据仓库的数据来自各个业务应用系统。业务系统中的数据形式多种多样&#xff0c;可能是 Oracle、MySQL、SQL Server 等关系数据库里的结构化数据&#xff0c;可能是文本、CSV 等平面文件或 Word、Excel 文档中的数…

数据仓库技术中的MPP

数据仓库世界里面的massively parallel processing 大概定义&#xff1a; MPP 是将任务并行的分散到多个服务器和节点上&#xff0c;在每个节点上计算完成后&#xff0c;将各自部分的结果汇总在一起得到最终的结果。       首先MPP 必须消除手工切分数据的工作量。 这是…

数据挖掘和数据仓库之间的区别

数据挖掘和仓储对于任何希望在全球或国家层面获得认可的组织来说都是必不可少的两个过程。这两种技术都有助于防止数据欺诈并提高管理统计数据和排名。数据挖掘用于依靠在数据仓库阶段收集的数据来检测重要模式。 数据挖掘和数据仓库都被视为数据分析的一部分。但它们以不同的方…

数据仓库ETL技术探究

ETL概述 在构建商业智能系统的时候&#xff0c;如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键&#xff0c;直接影响到系统的运行效率和最终结果。 ETL正是解决这一问题的有力工具。 ETL是指把数据从数据源装人数据仓库的过程&#xff0c…

数据仓库与数据挖掘知识点梳理

数据仓库与数据挖掘知识点梳理 一&#xff1a;数据挖掘 1&#xff1a;什么是数据挖掘 数据挖掘是从大量的数据中挖掘出隐含的、未知的、用户可能感兴趣的和对决策有潜在价值的知识和规则。 ----简单的说&#xff0c;数据挖掘就是从大量的数据中发现有用信息的过程 数据的丰富…