其他的经典排序算法链接地址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实现)的更多相关文章

  1. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

  2. 八大排序算法~简单选择排序【记录下标k变量的作用】

    八大排序算法~简单选择排序[记录下标k变量的作用] 1,思想:打擂台法,数组中的前n-1个元素依次上擂台"装嫩",后边的元素一个挨着一个不服,一个一个上去换掉它 2,优化:通过记录 ...

  3. 【DS】排序算法之选择排序(Selection Sort)

    一.算法思想 选择排序是一种简单直观的排序算法.它的工作原理如下: 1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列: 2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾 ...

  4. 排序算法总结------选择排序 ---javascript描述

    每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...

  5. 我的Java开发学习之旅------>Java经典排序算法之选择排序

    一.算法原理 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置, 接着第二次比较,前面"后一个元素"现变成了"前一个元素& ...

  6. Java排序算法之选择排序

    一.算法原理 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据}:第1趟排序,在待排序数据arr[1]~arr[n-1]中选出最小的数据,将它与arrr[0]交换:第2趟,在待排序 ...

  7. 排序算法之选择排序的思想以及Java实现

    1 基本思想 选择排序的思想是,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 2,算法的实现(Java) package Algorit ...

  8. 常用排序算法之——选择排序(C语言+VC6.0平台)

    选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...

  9. 【排序算法】选择排序(Selection sort)

    0. 说明 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最 ...

随机推荐

  1. cad工具快速选择特性里面是空的解决方法

    工具-选项-文件中,支持文件搜索路径中 添加,再浏览,找到"C:\Program Files\Common Files\Autodesk Shared"确定就OK了.

  2. .NET异步编程模式(一)

    .NET 提供了三种异步编程模型 TAP - task-based asynchronous pattern APM - asynchronous programming model EAP - ev ...

  3. java学习第一天.day02

    整数类型常量 整数类型的常量JVM默认使用 int 类型来存储 小数类型类型 小数类型的常量JVM默认使用 double 类型来存储 . ASCII表 A在码表的顺序是65,a在码表的顺序是97

  4. Unity获取脚本的CustomEditor(自定义编辑)数据

    在此之前,粗略的介绍下 CustomEditor(自定义编辑). Unity对于我们创建的Mono脚本提供了属性面板的展示和修改.默认情况下,Inspector面板中会显示当前脚本类的公开字段(pub ...

  5. 「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 ...

  6. 快速搭建 SpringCloud Alibaba Nacos 配置中心!

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud Alibaba 的核心 ...

  7. HOSMEL:一种面向中文的可热插拔模块化实体链接工具包

    HOSMEL: A Hot-Swappable Modularized Entity Linking Toolkit for Chinese ACL 2022 论文地址:https://aclanth ...

  8. 第七十篇:Vue组件的使用

    好家伙, 1.vue的组件化开发 1.1.什么是组件? 组件是对UI结构的复用, vue是一个支持组件化开发的前端框架, vue中规定:组件的后缀名是.vue 例如:App.vue文件本质上就是一个v ...

  9. 如何从零开始参与 Apache 顶级开源项目?| 墙裂推荐

    ​ 写在开头 从 2021 开始,有一个很有意思的说法经常在各大技术媒体或开源论坛中出现,「开源正在吞噬一切」.不论是否言过其实,从一个行业从业者的切身感知来看,开源确实从少数极客的小众文化成为主流的 ...

  10. 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 ...