java 排序算法之选择排序

yizhihongxing

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中的字符串类提供了一个indexOf(String str)方法,可以在一个字符串中查找指定的子串,并返回其在字符串中第一次出现的位置。如果查找不到目标字符串,则返回-1。 此外,还有一个类似的…

    Java 2023年5月27日
    00
  • Java实现多文件上传功能

    Java实现多文件上传功能攻略 本文主要介绍如何使用Java来实现多文件上传功能。 1. 前端实现 前端部分我们可以使用HTML表单来实现多文件上传的界面: <form action="/upload" method="post" enctype="multipart/form-data"&g…

    Java 2023年5月19日
    00
  • Web服务器识别技术揭秘

    Web服务器识别技术揭秘 什么是Web服务器识别技术? Web服务器识别技术是指通过检测HTTP请求中的特定标识,以确定正在运行的Web服务器软件类型和版本的过程。Web服务器指向内部资源并与客户端通信,因此了解服务器是非常重要的。许多黑客使用Web服务器识别来收集有关特定网站的有用信息,这些信息可以用于攻击。 Web服务器识别的原理 Web服务器识别的方法…

    Java 2023年6月16日
    00
  • 详解Java字节码编程之非常好用的javassist

    详解Java字节码编程之非常好用的javassist 前言 Java字节码是Java程序在编译过程中生成的中间代码,有些用户可能需要在程序运行时直接修改Java字节码,这就需要用到Java字节码编程技术。Java字节码编程技术使用非常广泛,涉及方面包括AOP、动态代理、字节码加密等。 在Java字节码编程中,有一个非常好用的工具库——javassist,它提…

    Java 2023年5月23日
    00
  • Spring Boot如何使用JDBC获取相关的数据详解

    下面是关于“Spring Boot如何使用JDBC获取相关的数据详解”的完整攻略。 1. 添加JDBC依赖 在Spring Boot项目中使用JDBC,需要在pom.xml文件中添加相应的依赖。在本示例中,我们使用MySQL数据库,因此需要添加以下依赖: <dependency> <groupId>mysql</groupId&…

    Java 2023年5月20日
    00
  • js实现分页功能

    实现前端分页功能通常是在前端使用JavaScript处理的。以下是实现 JavaScript 分页功能的完整攻略。 步骤一:了解分页功能的基本原理 前端分页的基本原理是将全部数据根据每一页的大小分成多个页面,只展示当前页的数据。主要有两个关键量,即分页数量和每一页的记录条数。我们首先需要确定每一页的记录条数。以每页10条记录进行分页为例,第1页展示第1-10…

    Java 2023年6月16日
    00
  • Java servlet后端开发超详细教程

    Java Servlet后端开发超详细教程 本文主要介绍Java Servlet后端开发的详细流程,包括搭建开发环境、创建Servlet、处理请求、响应结果等过程。 搭建开发环境 安装Java JDK:下载JDK并完成安装,配置环境变量。 下载并安装Eclipse:Eclipse是一款强大的集成开发环境,可用于Java开发。 安装Tomcat:Tomcat是…

    Java 2023年5月19日
    00
  • 浅谈用java实现事件驱动机制

    浅谈用Java实现事件驱动机制的完整攻略如下: 1. 什么是事件驱动机制 事件驱动是一种编程模型,指的是程序在运行过程中,按照事件或者消息的顺序来触发相应的处理代码,从而完成程序的任务。事件驱动机制通常包括三个主要组成部分:事件源、事件对象以及事件监听器。 2. 事件源、事件对象和事件监听器 事件源是触发事件的源头,是指能够发生某种动作或引起某种状态变化的对…

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