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日

相关文章

  • Java 日期转换详解及实例代码

    Java 日期转换详解及实例代码 在Java中,日期转换经常是很常见的需求,它涉及到将字符串解析为日期对象、将日期对象格式化为字符串等操作。下面将详细介绍Java日期转换的相关知识和实例代码。 日期格式化与解析 Date与String互相转换 将Date对象转换为字符串 Java提供了SimpleDateFormat class用于将Date对象转换为指定格…

    Java 2023年5月20日
    00
  • 详解Struts2拦截器机制

    详解Struts2拦截器机制 1. 什么是Struts2拦截器 Struts2拦截器是一个非常重要的组件,用于对请求进行拦截和处理,同时也是整个Struts2框架的核心。 在Struts2中,每个请求都会经过多个拦截器的处理,每个拦截器只是完成了部分工作,多个拦截器组合在一起,最终完成了一个完整的请求处理流程。 2. Struts2拦截器机制的流程 Stru…

    Java 2023年5月20日
    00
  • SpringMVC JSON数据交互实现过程解析

    SpringMVC JSON数据交互实现过程解析 在 SpringMVC 中,我们可以使用 JSON 数据格式来进行数据交互。本文将详细讲解 SpringMVC JSON 数据交互实现过程的原理和步骤,包括如何使用 @RequestBody 注解来接收 JSON 数据、如何使用 MappingJackson2HttpMessageConverter 来将 J…

    Java 2023年5月18日
    00
  • java jdbc连接和使用详细介绍

    Java JDBC连接和使用详细介绍 什么是JDBC? JDBC(Java Database Connectivity)是Java语言操作数据库的统一接口,它为访问不同的数据库提供了一个标准的类库。使用JDBC可以实现Java和数据库的交互操作。 JDBC步骤 使用JDBC进行数据库操作主要包括以下步骤: 加载JDBC驱动程序 建立数据库连接 创建Prepa…

    Java 2023年5月23日
    00
  • 使用maven shade插件解决项目版本冲突详解

    首先,需要清楚的是,当我们使用Maven构建项目时,会引入许多第三方依赖,有时这些依赖版本存在冲突,会导致我们的项目无法正常编译和运行。这时候就需要使用Maven Shade Plugin来解决依赖版本冲突问题。 以下是Maven Shade Plugin的使用教程: 1. 添加Maven Shade Plugin插件到项目中 在项目中的pom.xml文件中…

    Java 2023年6月2日
    00
  • javaweb中Filter(过滤器)的常见应用

    下面是“javaweb中Filter(过滤器)的常见应用”的完整攻略。 一、Filter(过滤器)的简介 Filter(过滤器)是JavaWeb中的一种动态Web组件,它可以拦截客户端和服务器之间的请求、响应,对它们进行预处理和后处理,从而起到了对请求和响应进行过滤的作用。 Filter(过滤器)位于请求和响应之间,可以截获客户端请求和服务器响应,Filte…

    Java 2023年5月20日
    00
  • java.net.ConnectException: Connection refused问题解决办法

    当Java应用程序尝试连接到另一个应用程序或服务器但无法建立连接时,你可能会遇到 java.net.ConnectException: Connection refused 异常。这种情况通常表示目标主机拒绝连接或者连接超时。下面是解决此问题的完整攻略: 1. 检查目标服务器/应用程序是否正在运行 首先,你需要确保你所连接的应用程序或服务器正在运行。 如果目…

    Java 2023年5月27日
    00
  • 使用JSP开发WebMail系统

    使用JSP开发WebMail系统的完整攻略包括以下步骤: 1. 确定技术栈和框架 首先需要确定使用的后端技术栈和框架,可以选择使用Java语言、JSP、Servlet、Spring、Hibernate等技术栈和框架来实现WebMail系统的开发。 2. 确定功能需求 在技术栈和框架确定之后,需要确定WebMail的功能需求,包括邮件的收发、删除、搜索、分类等…

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