java 排序算法之选择排序

Java 排序算法之选择排序

选择排序(Selection Sort)算法是一种简单直观的排序算法,它的基本思路是在未排序序列中找到最小元素,然后将其存放到序列的起始位置,然后再从剩余未排序的序列中继续寻找最小元素,存放到已排序序列的末尾。以此类推,直到全部元素均排序完成。

排序过程

以从小到大排序为例,选择排序的一次过程如下:

  1. 从待排序的序列中,找到关键字最小的元素;
  2. 如果该最小元素不是序列的第一个元素,也不是当前无序区的第一个元素,则将其位置和序列的第一个元素交换位置;
  3. 从剩余的关键字中继续寻找最小的元素;
  4. 重复步骤2,直到所有元素均排序完成。

代码示例

以下是 Java 代码示例:

public static void selectionSort(int[] arr) {
    int len = arr.length;
    int minIndex, temp;
    for (int i = 0; i < len - 1; i++) {
        minIndex = i;
        for (int j = i + 1; j < len; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i) {
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

示例说明

以下是对代码示例的两条说明:

示例 1

假设要排序的数组为 {3, 1, 4, 2, 5},初始状态下,数组元素的排序状态如下:

3 1 4 2 5

选择排序的第一轮排序过程如下:

  1. 从数组中找到最小值为 1,其下标为 1;
  2. 将元素 3 和元素 1 交换,数组状态变为:

1 3 4 2 5

选择排序的第二轮排序过程如下:

  1. 从数组中找到最小值为 2,其下标为 3;
  2. 将元素 3 和元素 2 交换,数组状态变为:

1 2 4 3 5

选择排序的第三轮排序过程如下:

  1. 从数组中找到最小值为 3,其下标为 3;
  2. 由于元素 3 已经在正确的位置上,因此无需交换,数组状态不变:

1 2 3 4 5

选择排序的第四轮排序过程如下:

  1. 从数组中找到最小值为 4,其下标为 3;
  2. 将元素 4 和元素 4 交换,数组状态不变:

1 2 3 4 5

选择排序的第五轮排序过程如下:

  1. 从数组中找到最小值为 5,其下标为 4;
  2. 将元素 5 和元素 5 交换,数组状态不变:

1 2 3 4 5

因为数组已经排好序,所以选择排序结束。

示例 2

假设要排序的数组为 {10, 7, 8, 9, 1, 5},初始状态下,数组元素的排序状态如下:

10 7 8 9 1 5

选择排序的第一轮排序过程如下:

  1. 从数组中找到最小值为 1,其下标为 4;
  2. 将元素 10 和元素 1 交换,数组状态变为:

1 7 8 9 10 5

选择排序的第二轮排序过程如下:

  1. 从数组中找到最小值为 5,其下标为 5;
  2. 将元素 10 和元素 5 交换,数组状态变为:

1 7 8 9 5 10

选择排序的第三轮排序过程如下:

  1. 从数组中找到最小值为 7,其下标为 1;
  2. 将元素 7 和元素 7 交换,数组状态不变:

1 7 8 9 5 10

选择排序的第四轮排序过程如下:

  1. 从数组中找到最小值为 8,其下标为 2;
  2. 将元素 8 和元素 8 交换,数组状态不变:

1 7 8 9 5 10

选择排序的第五轮排序过程如下:

  1. 从数组中找到最小值为 9,其下标为 3;
  2. 将元素 9 和元素 9 交换,数组状态不变:

1 7 8 9 5 10

因为数组还没有排好序,所以需要进行第二轮排序。

选择排序的第六轮排序过程如下:

  1. 从数组中找到最小值为 5,其下标为 4;
  2. 将元素 7 和元素 5 交换,数组状态变为:

1 5 8 9 7 10

选择排序的第七轮排序过程如下:

  1. 从数组中找到最小值为 7,其下标为 4;
  2. 将元素 8 和元素 7 交换,数组状态变为:

1 5 7 9 8 10

选择排序的第八轮排序过程如下:

  1. 从数组中找到最小值为 8,其下标为 4;
  2. 将元素 9 和元素 8 交换,数组状态变为:

1 5 7 8 9 10

因为数组已经排好序,所以选择排序结束。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 排序算法之选择排序 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • ASP连接SQL2005数据库连接代码

    要连接SQL Server 2005数据库,可以使用以下四种方式: 使用SQL Server Management Studio(SSMS):在SSMS中,您可以轻松地打开数据库,并使用查询编辑器中提供的标准SQL语言编写查询。SSMS还包括一个用于管理数据库和服务器设置的多种选项。 使用ODBC驱动程序:这是一个基础的数据库驱动程序,用于通过SQL语言连接…

    Java 2023年6月15日
    00
  • Springboot+AOP实现时间参数格式转换

    下面是”Springboot+AOP实现时间参数格式转换”的完整攻略。 1、背景 在web开发过程中,我们经常需要将前端传过来的时间参数转换成我们需要的格式。如果每次方法处理前都要手动转换,这无疑会增加代码的复杂度和开发时间。因此,我们可以利用Springboot框架提供的AOP功能,在方法执行前进行参数格式转换,从而减少开发时间和复杂度。 2、实现步骤 2…

    Java 2023年6月1日
    00
  • jsp中checkbox用法详解

    JSP中Checkbox用法详解 在JSP中通过Checkbox可以实现多选以及默认选中的功能,下面我们来详细讲解Checkbox的用法。 CheckBox的基本语法 Checkbox的基本语法如下: <input type="checkbox" name="checkName" value="chec…

    Java 2023年6月15日
    00
  • Java中mybatis关于example类的使用详解

    Java中mybatis关于Example类的使用详解 Mybatis的Example类是一个用于构建查询条件的实用工具。它可以帮助我们快速地生成复杂的查询语句,避免了手写SQL的繁琐,提高了开发效率。 常用方法 清空查询条件 clear() 在使用Example构造查询条件的时候,我们常会需要重用这个对象,这时候就需要清空之前的查询条件。可以通过调用Exa…

    Java 2023年5月20日
    00
  • springboot 自定义权限标签(tld),在freemarker引用操作

    下面是完整攻略: 1. 首先创建Spring Boot项目 可以使用Spring Initializr创建一个新的Spring Boot项目,选择Web和Freemarker作为依赖项。 2. 添加依赖项 在pom.xml文件中添加以下依赖项: <dependency> <groupId>org.springframework.boo…

    Java 2023年6月15日
    00
  • Springmvc @PathVariable的用法解析

    SpringMVC @PathVariable的用法解析 在SpringMVC中,@PathVariable注解用于将URL中的变量绑定到方法的参数上。本文将详细介绍@PathVariable的用法和示例。 基本用法 @PathVariable注解可以用于方法的参数上,用于将URL中的变量绑定到方法的参数上。例如: @GetMapping("/us…

    Java 2023年5月17日
    00
  • SpringBoot配置MyBatis-Plus实现增删查改

    下面我将详细讲解“SpringBoot配置MyBatis-Plus实现增删查改”的完整攻略。 步骤一:引入依赖 在pom.xml文件中添加MyBatis-Plus和MySQL的依赖: <dependencies> <dependency> <groupId>com.baomidou</groupId> <…

    Java 2023年5月20日
    00
  • Java中5种方式实现String反转

    当我们需要对字符串进行反转操作时,在Java中一共有五种方式可以实现这个需求,下面将进行详细讲解。 1. 使用StringBuffer或StringBuilder的reverse()方法 这是实现字符串反转最简单、直接的方式。因为StringBuffer和StringBuilder都是可变的,所以它们都提供了一个内置的reverse()方法用来反转字符串。 …

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部