经典排序算法之-----选择排序(Java实现)
其他的经典排序算法链接地址:https://blog.csdn.net/weixin_43304253/article/details/121209905
选择排序思想:
思路:
- 1、从整个数据中挑选出最小的数据放在首位、然后再从剩下的数据中、挑选出最小的数据放在第二位。依次类推
- 2、首先挑选出整个未排序数据的最小值、放到第一位
- 3、然后、从第二个位置到最后一个数据中、挑选出最小的值。放在第二位i、依次类推
最关键部分的代码:
for (int i = 0; i < len-1; i++) {
minIndex=i;//每经过一次循环、下次循环都会减少比较的数据
//内部循环的主要目的是:找出每一轮中的最小数据下表
for(int j=i+1;j<len;j++){
if(arr[minIndex] >arr[j]){
minIndex=j;//交换下标、经过一轮的比较、可以找出最小数据的下标
}
}
//外部循环来控制:数据的排序
int temp =arr[i];//先保存第一个元素的数据
arr[i] =arr[minIndex];//将每一轮循环后的最小值放在这里
arr[minIndex] =temp;
}

我觉得这个图有助于理解

然后是代码看一下
package com.zheng.dao;
import java.util.Random;
//选择排序
public class TestChooseDemo {
/**
* 思路:从整个数据中挑选出最小的数据放在首位、然后再从剩下的数据中、挑选出最小的数据放在第二位。依次类推
* 1、首先挑选出整个未排序数据的最小值、放到第一位
* 2、然后、从第二个位置到最后一个数据中、挑选出最小的值。放在第二位i、依次类推
*/
public void sortSelete(int arr[]){
int len = arr.length;
int minIndex;//假设最小的数据是第一个
for (int i = 0; i < len-1; i++) {
minIndex=i;//每经过一次循环、下次循环都会减少比较的数据
//内部循环的主要目的是:找出每一轮中的最小数据下表
for(int j=i+1;j<len;j++){
if(arr[minIndex] >arr[j]){
minIndex=j;//交换下标、经过一轮的比较、可以找出最小数据的下标
}
}
//外部循环来控制:数据的排序
int temp =arr[i];//先保存第一个元素的数据
arr[i] =arr[minIndex];//将每一轮循环后的最小值放在这里
arr[minIndex] =temp;
}
}
//随机生成一个数组
public int[] randomArr(int len,int maxNum,int minNum){
int []arr=new int[len];//定义一个一维数组
Random random = new Random();
for (int i = 0; i < len; i++) {
arr[i]=random.nextInt(maxNum-minNum+1)+minNum;
}
return arr;
}
//打印数组
public void Print(int[] arr){
int len =arr.length;
System.out.print("【");
for (int i = 0; i < len; i++) {
if(i==len-1){
System.out.print(arr[i]);
}else{
System.out.print(arr[i]+"、");
}
}
System.out.println("】");
}
public static void main(String[] args) {
TestChooseDemo testChooseDemo = new TestChooseDemo();
// int[] arr={1,3,2,6,4,5,8,7,9};
// System.out.print("原始数据:");
// testChooseDemo.Print(arr);
// System.out.print("选择排序后的数据:");
// testChooseDemo.sortSelete(arr);
// testChooseDemo.Print(arr);
//生成一个随机数组
int []arr = testChooseDemo.randomArr(10,100,50);
System.out.print("生成的随机数组:");
testChooseDemo.Print(arr);
System.out.print("选择排序后数据:");
testChooseDemo.sortSelete(arr);
testChooseDemo.Print(arr);
}
}
测试1:

测试2:

测试3:

经典排序算法之-----选择排序(Java实现)的更多相关文章
- Python排序算法之选择排序定义与用法示例
Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...
- 八大排序算法~简单选择排序【记录下标k变量的作用】
八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...
- 【DS】排序算法之选择排序(Selection Sort)
一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
- 我的Java开发学习之旅------>Java经典排序算法之选择排序
一.算法原理 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置, 接着第二次比较,前面"后一个元素"现变成了"前一个元素& ...
- Java排序算法之选择排序
一.算法原理 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据,将它与arrr[0]交换:第2趟,在待排序 ...
- 排序算法之选择排序的思想以及Java实现
1 基本思想 选择排序的思想是,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 2,算法的实现(Java) package Algorit ...
- 常用排序算法之——选择排序(C语言+VC6.0平台)
选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...
- 【排序算法】选择排序(Selection sort)
0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...
随机推荐
- cad工具快速选择特性里面是空的解决方法
工具-选项-文件中,支持文件搜索路径中 添加,再浏览,找到"C:\Program Files\Common Files\Autodesk Shared"确定就OK了.
- .NET异步编程模式(一)
.NET 提供了三种异步编程模型 TAP - task-based asynchronous pattern APM - asynchronous programming model EAP - ev ...
- java学习第一天.day02
整数类型常量 整数类型的常量JVM默认使用 int 类型来存储 小数类型类型 小数类型的常量JVM默认使用 double 类型来存储 . ASCII表 A在码表的顺序是65,a在码表的顺序是97
- Unity获取脚本的CustomEditor(自定义编辑)数据
在此之前,粗略的介绍下 CustomEditor(自定义编辑). Unity对于我们创建的Mono脚本提供了属性面板的展示和修改.默认情况下,Inspector面板中会显示当前脚本类的公开字段(pub ...
- 「2020-2021 集训队作业」Yet Another Linear Algebra Problem(行列式,Binet-Cauchy 公式)
题面 出题人:T L Y \tt TLY TLY 太阳神:Tiw_Air_OAO 「 2020 - 2021 集 训 队 作 业 」 Y e t A n o t h e r L i n e a r A ...
- 快速搭建 SpringCloud Alibaba Nacos 配置中心!
Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...
- HOSMEL:一种面向中文的可热插拔模块化实体链接工具包
HOSMEL: A Hot-Swappable Modularized Entity Linking Toolkit for Chinese ACL 2022 论文地址:https://aclanth ...
- 第七十篇:Vue组件的使用
好家伙, 1.vue的组件化开发 1.1.什么是组件? 组件是对UI结构的复用, vue是一个支持组件化开发的前端框架, vue中规定:组件的后缀名是.vue 例如:App.vue文件本质上就是一个v ...
- 如何从零开始参与 Apache 顶级开源项目?| 墙裂推荐
写在开头 从 2021 开始,有一个很有意思的说法经常在各大技术媒体或开源论坛中出现,「开源正在吞噬一切」.不论是否言过其实,从一个行业从业者的切身感知来看,开源确实从少数极客的小众文化成为主流的 ...
- The 19th Zhejiang Provincial Collegiate Programming Contest
目录 A.JB Loves Math B.JB Loves Comma C. JB Wants to Earn Big Money G. Easy Glide I. Barbecue L. Candy ...