其他的经典排序算法链接地址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. [51nod 1822]序列求和

    \(k\leq 200000\) 考虑转化成枚举 \(k\) 的形式 我们错位相减! \[A_k=\sum_{i=1}^N i^K\times R^i \\ RA_k=\sum_{i=2}^{N+1} ...

  2. Java反射原理和实际用法

    背景 反射在Java中非常重要,是Java区别于其他编程语言的一大特性.Java中的AOP切面.动态代理等看起来像黑魔法一样的技术,就离不开反射.字节码等.这些技术能在不侵入原有代码的情况下,做一些增 ...

  3. Two---python循环语句/迭代器生成器/yield与return/自定义函数与匿名函数/参数传递

    python基础02 条件控制 python条件语句是通过一条或多条语句的执行结果(Ture或者False)来执行的代码块 python中用elif代替了else if,所以if语句的关键字为:if- ...

  4. Luogu4111 [HEOI2015]小Z的房间 (矩阵树,辗转相除高斯消元)

    除法不能用于同余系,要辗转相除.注意不能加入柱子到矩阵. #include <iostream> #include <cstdio> #include <cstring& ...

  5. MyBatis 04 实战

    增删改查实现 在实际使用中,MyBatis 的使用遵从一定的规范. 常用的增删改查的 MyBatis 实现如下: Mapper.xml <?xml version="1.0" ...

  6. Ceph 块存储 创建的image 映射成块设备

    将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write failed RBD ima ...

  7. Word 脚注和尾注是什么?怎么设置?

    描述 脚注一般位于页面的底部,作为文档某处内容的注释.尾注一般位于文档的末尾,列出引文的出处等. 设置脚注和尾注 将光标移动到要插入脚注或尾注的地方,然后点击"引用"选项卡. 左边 ...

  8. mybatisplus-ActiveRecord 模式

    ActiveRecord 模式 直接调用Model对象来进行增删改查. 实体类只需继承 Model 类即可进行强大的 CRUD 操作 需要项目中已注入对应实体的BaseMapper 实体类User 点 ...

  9. ABC206 F - Interval Game 2 (区间DP,博弈论,SG函数)

    题面 题意很简单 A l i c e \tt Alice Alice 和 B o b \tt Bob Bob 在博弈.摆在他们面前有 N \rm N N 个区间 [ l i , r i ) \rm[l ...

  10. 2019 CSP-S Ⅱ 游记

    day0(试机) 第零天,重新打了一遍头文件和读优,熟悉了一下就匆匆走了. day1 T1一看到先把二分打了,然后发现long long要爆,好慌 主要是基础知识不够扎实,不知道unsigned lo ...