其他的经典排序算法链接地址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. 解决ASP.NET Core在Task中使用IServiceProvider的问题

    前言 问题的起因是在帮同事解决遇到的一个问题,他的本意是在EF Core中为了解决避免多个线程使用同一个DbContext实例的问题.但是由于对Microsoft.Extensions.Depende ...

  2. eclipse mave无法下载jar包

    解决方法: 先查看本地配置是否正确: 确保此处没有勾选 此处和自己配置的maven一致,没有则修改此处设置.然后项目上右键–>Maven–>Update Project 即可 . 如果还不 ...

  3. 一颗完整意义的LPWAN SOC无线通信芯片——ASR6601

    ASR6601是完整意义的LPWAN SOC无线通信芯片,该芯片集成了LORA射频收发器.调制解调器和32位RISC MCU.MCU采用cortex M4,频率48mhz.LORA射频收发器从150 ...

  4. Java SE 9 新增特性

    Java SE 9 新增特性 作者:Grey 原文地址: Java SE 9 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new_ ...

  5. 使用docker简单编译k20pro内核

    简介 本文将介绍一下如何使用docker编译红米k20pro的内核.作者当时尝试构建内核的原因是为了将3年前(好像是吧)购买的k20pro至尊版(已退役,12GB内存,512GB硬盘)制作成一个小的服 ...

  6. 我就获取个时间,机器就down了

    本文主要讲解linux 时间管理系统中的一个问题 背景:linux 时间管理,包含clocksource,clockevent,timer,tick,timekeeper等等概念 , 这些概念有机地组 ...

  7. Android序列化的几种实现方式

    一.Serializable序列化 Serializable是java提供的一种序列化方式,其使用方式非常简单,只需要实现Serializable接口就可以实现序列化. public interfac ...

  8. 安装配置华为Fusion access(Windows AD)桌面云并对接Fusion Compute与Windows_server_2012

    安装Fusion access虚拟机 根据自己情况自定义 点击编辑虚拟机设置 添加镜像 点击确定并开启此虚拟机 选择第二个 Install 添加Network:修改hostname:修改密码 回车添加 ...

  9. multiprocessing 让子进程忽略信号,手动关闭子进程

    起因 同事想要写一个代码,主进程中监听SIGINT.SIGTERM信号退出,并关闭启动的子进程,代码类似这样 import signal import sys import time from mul ...

  10. KingbaseES R6 集群修改物理IP和VIP案例

    在用户的实际环境里,可能有时需要修改主机的IP,这就涉及到集群的配置修改.以下以例子的方式,介绍下KingbaseES R6集群如何修改IP. 一.案例测试环境 操作系统: [KINGBASE@nod ...