首页 > 编程语言 >常见排序算法之选择排序

常见排序算法之选择排序

时间:2023-01-18 23:32:55浏览次数:45  
标签:minIndex arr int 常见 最小值 算法 排序 minNum


文章目录

  • ​​1、概述​​
  • ​​2、代码实现​​
  • ​​3、测试代码​​



1、概述

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零选择排序是不稳定的排序方法。



2、代码实现

核心思想:如果希望我们的数据按照从小到大进行排列,那么我们需要经历(n-1)次循环(最后一次只有一个数),每一次循环的目的则是为了找到剩余数据中的最小值,当我们找到了对应的最小值后,再进行一个数据的交换即可。

package pers.mobian.xuanze;

import java.util.Arrays;

public class SelectSortTest02 {
public static void main(String[] args) {
int[] arr = {1, 2, 2, 1, -1};

//1.遍历我们的整个数组
for (int i = 0; i < arr.length; i++) {
//2.我们假设当前的第一个数字就是最小的数字
int minNum = arr[i];
//3.假设当前第一个索引就是最小值的索引
int minIndex = i;

//4.遍历我们剩下的数据(除去已经排好的数据)
for (int j = i + 1; j < arr.length; j++) {
//5.如果后面的数据中存在比我们假设的数据更小的数据
if (minNum > arr[j]) {
//6.将我们一次遍历后的最小的值,赋值给真正的最小值
minNum = arr[j];
//7.将我们一次遍历后的最小值对应的索引值,赋值给真正的最小值对应的索引值
minIndex = j;
}
}
//这里可以添加一个优化的判断,如果开始的数据就是最小的,那就不需要进行数据的交换
if (minIndex != i) {
//由于我们前面保存了最小值,所以此处交换数值的时候,我们先将满足真正最小值,再满足我们假设的最小值
//8.将我们之前假设的最小值,赋值给真正最小值的位置
arr[minIndex] = arr[i];
//9.将一次遍历后的最小值,传递给真正的最小值的位置(因为之前我们的最小值是假设的)
arr[i] = minNum;
}
}
System.out.println(Arrays.toString(arr));
}
}



3、测试代码

利用我们以有的条件,进行一个小案例的测试:计算将数组长度为80000的乱序数组排序所花费的时间

package pers.mobian.xuanze;

import java.util.Arrays;

public class SelectSortTest03 {
public static void main(String[] args) {
//1.创建一个大小为80000的随机数组
int[] arr = new int[80000];
for (int i = 0; i < 80000; i++) {
arr[i] = (int) (Math.random()*80000);
}

long start = System.currentTimeMillis();
selectSort(arr);
long end = System.currentTimeMillis();
//2.计算最终的运算时间
System.out.println("选择排序所需时间为:"+(end - start));


}

//对应的选择排序方法体
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int minNum = arr[i];
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (minNum > arr[j]) {
minNum = arr[j];
minIndex = j;
}
}
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = minNum;
}
}
}
}

总结:对比于冒泡排序,选择排序速度更快(需要交换数据的次数少),但是是不稳定。


标签:minIndex,arr,int,常见,最小值,算法,排序,minNum
From: https://blog.51cto.com/u_15942107/6019573

相关文章

  • 常见排序算法之冒泡排序
    文章目录​​1、概述​​​​2、传统代码​​​​3、优化后代码​​​​4、测试案例​​1、概述冒泡排序(BubbleSort),是一种的较简单且常见的的排序算法。它重复地访问排序的......
  • 常见排序算法之插入排序
    文章目录​​1、概述​​​​2、代码实现​​​​3、测试代码​​1、概述插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简......
  • 17种编程语言实现排序算法-冒泡排序
    开源地址https://gitee.com/lblbc/simple-works/tree/master/sort/bubbleSort1.安卓Java版privatevoidsort(int[]array){for(inti=0;i<array.length......
  • 司守奎《数学建模算法与应用》课后习题:线性规划
    写在最前面:    我是一个刚学数模的小白,觉得把自己的思路和代码啊公式写出来能提升学习效率,在参考了司守奎老师的《数学建模算法与应用》(第二版)一书后想把自己的想......
  • java-数组相关的算法(尚硅谷)
    1.数组元素的赋值(杨辉三角、回形数等)2.求数值型数组中元素的最大值、最小值、平均数、总和等3.数组的复制、反转、查找(线性查找、二分法查找)4.数组元素的排序算法一......
  • J Tokitsukaze and Sum of MxAb【2023牛客寒假算法基础集训营2】
    J TokitsukazeandSumofMxAb原题链接题意给出长为n的序列,对于所有的i,j求max\((|a_i-a_j|,|a_i+a_j|)\)之和思路对于两个负数\(a_i\)和\(a_j\),max\((|a_i-......
  • 刷算法题的一些Trick
    1字符串的输入在读字符串的时候,一般建议这么写charstr[N];//字符数组scanf("%s",str);//因为str可以当作指针,所以不用&puts(str);字符串作为函数参数的时候......
  • Graham算法笔记
    一切参照题解笔记部分:怎么判断旋转方向:如图,第一次入栈,P2直接进入此处为什么p3是左转:我们判断左转还是右转的方法:看要进入的点pi与栈顶的点pa和栈第二个点pb:此处就......
  • 5g选址算法汇总
    专家打分(层次分析法)和熵权法5G基站选址思路层次分析法......
  • D.现在是,学术时间 (II)【2023牛客寒假算法基础集训营1】
    D.现在是,学术时间(II)原题连接题意1.给出一个由平面上两点\((0,0),(x,y)\)所确定的GT目标框和一个点\(P(x_p,y_p)\)。请你求出在所有以P点作为其中一个顶点且边都平行......