其他的经典排序算法链接地址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. React报错之Encountered two children with the same key

    正文从这开始~ 总览 当我们从map()方法返回的两个或两个以上的元素具有相同的key属性时,会产生"Encountered two children with the same key&q ...

  2. 从 React 原理来看 ahooks 是怎么解决 React 的闭包问题的?

    本文是深入浅出 ahooks 源码系列文章的第三篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本文来探索一下 ahooks 是怎么解决 React 的闭包问题的 ...

  3. centos7.6内核之cfs_bandwidth下的distribute_cfs_runtime hard lockup

    接到业务兄弟报障,出现多例crash,堆栈大多数如下: KERNEL: /usr/lib/debug/lib/modules/3.10.0-957.27.2.el7.x86_64/vmlinuxDUM ...

  4. [网鼎杯 2018]Comment-1|SQL注入|二次注入

    1.打开之后只有一个留言页面,很自然的就想到了二次注入得问题,顺带查看了下源代码信息,并没有什么提示,显示界面如下: 2.那先扫描一下目录,同时随便留言一个测试以下,但是显示需要登录,账户.密码给出了 ...

  5. springboot配置(yami配置文件,JSR303数据校验,多环境配置)

    yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...

  6. SpringMvc请求流程源码解析

    目录 SpringMvc请求流程图 请求流程粗讲解 方法细讲 doDispatcher --> 核心 找到Handler#getHandler getHandler(request) mappi ...

  7. Android蓝牙线控切歌、连接状态监听(无线耳机也适用)

    1. 监听蓝牙设备(音频)连接状态 所有代码已测试在Android11也能正常使用 (Android SDK 30) 首先新建一个广播类 BluetoothStateReceiver /** * @a ...

  8. C语言小游戏:贪吃蛇

    #include <graphics.h> #include <conio.h> #include <stdio.h> #define WIDTH 40 //设置宽 ...

  9. CURL 用法记录

    CURL 用法记录 在工作中经常需要用到curl 命令,记录一下常用的场景 Send a POST Request with JSON Data curl -d '{"login" ...

  10. Linux 压缩、解压缩命令

    Linux 压缩.解压缩命令 tar 语法命令 tar [options-] [files] options: 选择 描述 -A 追加tar文件至归档 -c 创建一个新文档 -d 找出归档和文件系统的 ...