首页 > 编程语言 >选择排序算法:简单但有效的排序方法

选择排序算法:简单但有效的排序方法

时间:2023-10-02 15:00:41浏览次数:40  
标签:arr int 元素 选择 算法 数组 简单 排序

在计算机科学中,排序算法是基础且重要的主题之一。选择排序(Selection Sort)是其中一个简单但非常有用的排序算法。本文将详细介绍选择排序的原理和步骤,并提供Java语言的实现示例。

选择排序算法:简单但有效的排序方法_数组

选择排序的原理

选择排序的核心思想是不断地从待排序的元素中选择最小的元素,然后将其放置在已排序部分的末尾。它的过程类似于人们在扑克牌中不断选择最小的牌并将其放置在手中的已排序牌的最后一张。这个过程重复进行,直到所有牌都被排序完毕。

选择排序的步骤

选择排序的步骤可以简单概括为以下几个阶段:

  1. 初始状态: 将整个数组视为未排序的部分。
  2. 第一次选择: 从未排序部分选择最小的元素,并将其与未排序部分的第一个元素交换位置。此时,第一个元素被视为已排序的一部分,而其余部分是未排序的。
  3. 第二次选择: 从剩余未排序部分选择最小的元素,并将其与未排序部分的第一个元素交换位置。现在,前两个元素被视为已排序的一部分,而其余部分是未排序的。
  4. 重复: 重复上述选择和交换的过程,每次选择并交换一个最小的元素,直到整个数组变为已排序状态。
  5. 完成: 当算法完成时,整个数组都已排序。

选择排序算法:简单但有效的排序方法_选择排序_02

Java代码选择排序

以下是使用Java语言实现选择排序算法的示例代码:

public class Test {

    public static void main(String[] args) {
        int[] arr = new int[]{5,2,4,6,7,1,3};
        selectionSort(arr);
    }


    public static void selectionSort(int[] arr){

        System.out.println("原始数组:"+ Arrays.toString(arr));
        //获取数组长度
        int len = arr.length;

        //循环len-1次,进行数组排序,没排序完一趟,则从下标为i的元素及之后的元素为未排序的部分
        for(int i = 0; i< len-1; i++){

            //默认未排序的部分的第一个元素为最小元素下标
            int minIndex = i;

            //循环未排序的部分的数组,找出最小6元素的下标
            for(int j = i+1; j < len; j++){
                if(arr[j] < arr[minIndex]){
                    minIndex = j;
                }
            }

            //将最小元素与未排序的部分的数组的第一个元素交换
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;

            // 打印每趟排序完成后的数组状态,以便查看排序进度
            System.out.println("第"+(i+1)+"趟排序完成的数组:"+ Arrays.toString(arr));

        }

        System.out.println("排序完成的数组:"+ Arrays.toString(arr));

    }
}

打印结果为:

原始数组:[5, 2, 4, 6, 7, 1, 3]
第1趟排序完成的数组:[1, 2, 4, 6, 7, 5, 3]
第2趟排序完成的数组:[1, 2, 4, 6, 7, 5, 3]
第3趟排序完成的数组:[1, 2, 3, 6, 7, 5, 4]
第4趟排序完成的数组:[1, 2, 3, 4, 7, 5, 6]
第5趟排序完成的数组:[1, 2, 3, 4, 5, 7, 6]
第6趟排序完成的数组:[1, 2, 3, 4, 5, 6, 7]
排序完成的数组:[1, 2, 3, 4, 5, 6, 7]

以上代码演示了如何使用选择排序对一个整数数组进行排序。选择排序算法虽然不如一些高级排序算法快速,但它易于理解和实现,对于小型数据集或接近排序状态的数据集可能是一个合理的选择。

总结

选择排序虽然不是最高效的排序算法,但它是一个简单而直观的例子,有助于理解排序算法的基本原理。希望本文的解释和示例有助于您更好地理解选择排序,并在需要时应用它来解决排序问题。

标签:arr,int,元素,选择,算法,数组,简单,排序
From: https://blog.51cto.com/xiuji/7683691

相关文章

  • 153. 寻找旋转排序数组中的最小值
    已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a[n-1]]旋转一次的结果......
  • RocketMQ简单入门
    服务端安装及配置docker安装dockerpullrocketmqinc/rocketmq:4.4.0指定版本号是为了后面确定配置文件的路径启动namesrvdockerrun-d-p9876:9876--namerocketmq-nameservice-eMAX_POSSIBLE_HEAP=100000000rocketmqinc/rocketmq:4.4.0shmqnamesrv运行成功执行m......
  • Kafka简单入门
    使用docker安装dockerpullbitnami/kafkadockerrun-d-p9092:9092--namekafka-server\-eALLOW_PLAINTEXT_LISTENER=yes\-eKAFKA_CFG_ZOOKEEPER_CONNECT=ip:2181\-eKAFKA_BROKER_ID=1\-eKAFKA_CFG_LISTENERS=PLAINTEXT://:9092\-eKAFKA_CFG_ADVERTISE......
  • [算法]按位异或^的种种玩法
    本文使用C语言什么是按位异或^首先将不同数制的数写成二进制,例如9->0b1001.然后最末位对齐,依次按位异或.规则:0^0=0;1^1=0;1^0=1推论:任意整数x,都有0^x=x;x^x=0\来看看应用寻找一个单身狗数像[1,3,2,2,3]这样除了某一个数1,剩下的数字都是成......
  • [算法]双指针的种种应用
    本文使用C语言Q:为什么要用双指针?A:因为通过使用双指针可以使算法的时间复杂度降低(或者降低遍历次数),有时也能降低空间复杂度分类根据双指针的用法,可分为前后双指针,头尾双指针,快慢双指针.....前后双指针应用一删除排序数组中的重复项要求:原地删除,并返回新数组的......
  • 深入理解算法与数据结构
    ......
  • 点云配准算法-旋转矩阵估计-Kabsch-Umeyama algorithm
    Kabsch-Umeyamaalgorithm参考文献:https://www.wikiwand.com/en/Kabsch_algorithm面向点云配准,最小化两点集均方根误差(RMSD,rootmeansquareddeviation)来计算最佳旋转矩阵。注:该算法只能计算旋转矩阵,做点云配准还需要计算平移向量。当平移和旋转都正确计算出,该算法有......
  • 实验1 C语言输入输出和简单程序编写
    1.实验任务1task1_1.c源代码1#include<stdio.h>2intmain()3{4printf("o\n");5printf("<H>\n");6printf("II\n");7printf("o\n");8printf("<H>\n"......
  • 实验1c语言的简单输入输出和简单程序编写
    实验1#include<stdio.h>#include<stdlib.h>intmain(){printf("0\n");printf("<H>\n");printf("II\n");system("pause");return0;}实验2#include<stdio.h>#include<stdlib.......
  • 掌握这些技巧,让Excel批量数据清洗变得简单高效!
    什么是数据清洗数据清洗是指在数据处理过程中对原始数据进行筛选、转换和修正,以确保数据的准确性、一致性和完整性的过程。它是数据预处理的一部分,旨在处理和纠正可能存在的错误、缺失值、异常值和不一致性等数据质量问题。为什么要数据清洗Excel在数据采集场景中非常常用。作......