当前位置:   article > 正文

了解 Java 中的选择排序_选择排序java

选择排序java

介绍:

排序算法是计算机科学中的基本概念,用于按特定顺序排列元素集合。这些算法采用输入数组或列表,并根据预先确定的比较规则重新排列其元素。它还使解决问题的简单方法。。

目录

1. 为什么要选择排序?。

  1. 为什么要选择排序?
    选择排序是最容易理解和实现的排序算法之一。它具有简单的逻辑,使其成为教育目的或简单性优于最佳性能的不错选择。选择排序在具有少量元素的小型数据集或数组上表现相当不错。对于小输入尺寸,其 O(n^2) 的时间复杂度并不显著,并且算法的简单性可能超过性能考虑。

2.选择排序的可视化表示

在我们进入代码之前,让我们直观地理解算法,以便轻松掌握算法。

让我们假设一个包含以下元素的未排序数组。

数组 = {9,1,8,4,7,2,}
在这里插入图片描述

第 1 步:选择数组中的最大元素,在我们的数组中选择最大元素 id 9。
在这里插入图片描述
第 2 步:将最大的元素与数组中的最后一个元素交换
在这里插入图片描述
在这里插入图片描述
第 3 步:交换元素后,将右侧指针向前移动一步,即 *Array.length-1 *,因为最大的元素被移动到数组的末尾
在这里插入图片描述
第 4 步:重复上述过程,直到我们的窗口大小减小到数组中的一个元素。
在这里插入图片描述
7已经在所在的位置,所以无需更改
在这里插入图片描述
6换到4的位置
在这里插入图片描述
4换到2的位置
在这里插入图片描述
2换到1的位置
在这里插入图片描述
数组中的所有元素都排序完成,我们得到下图
在这里插入图片描述

3.用于选择排序的 Java 代码。

示例如下所示:

import java.util.Arrays;

public class selectionSort {
    public static void main(String[] args) {
        int[] nums = {9,1,8,4,7,2,6};
        selection(nums);
        System.out.println(Arrays.toString(nums));

    }

    public static void selection(int[] nums){
        for(int i=0;i<nums.length;i++){
            int last = nums.length-i-1;
            int maximum=maximumIndex(nums,0,last);
             swap(nums,maximum,last);
        }

        }
       static int maximumIndex(int[] nums,int start,int end){
        int max=start;
        for(int maxIndex=start;maxIndex<=end;maxIndex++){
            if(nums[max]<nums[maxIndex]){
                max=maxIndex;
            }
        }
        return max;
    }

    static void swap(int[] nums,int maximum,int last){

        int temp=nums[maximum];
        nums[maximum]=nums[last];
        nums[last]=temp;

    }


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

4.说明

让我们假设一个包含元素 9,1,8,4,7,2,6 的数字数组
创建一个为Select 的方法nums 作为参数

public static void selection(int[] nums){...}
  • 1

我运行一个简单的 for 循环来查找数组中的最大元素,我将其与数组中的最后一个元素交换,并将指针向前移动一步并返回 max

static int maximumIndex(int[] nums,int start,int end){
        int max=start;
        for(int maxIndex=start;maxIndex<=end;maxIndex++){
            if(nums[max]<nums[maxIndex]){
                max=maxIndex;
            }
        }
        return max;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

同样,我创建了一个 swap() 的方法,该方法将 nums 数组、最大元素和数组的最后一个元素作为参数。在交换数组中,我只是使用三个变量交换它们

static void swap(int[] nums,int maximum,int last){

        int temp=nums[maximum];
        nums[maximum]=nums[last];
        nums[last]=temp;

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

我只是在选择方法中调用这两个方法,并使用 for 循环运行到数组的末尾

for(int i=0;i<nums.length;i++){
            int last = nums.length-i-1;
            int maximum=maximumIndex(nums,0,last);
             swap(nums,maximum,last);
        }
  • 1
  • 2
  • 3
  • 4
  • 5

完成这些简单的步骤后,我将获得排序数组,我只需通过在 main 方法中调用选择来显示 nums 数组并在终端中打印数组

public static void main(String[] args) {
        int[] nums = {9,1,8,4,7,2,6};
        selection(nums);
        System.out.println(Arrays.toString(nums));

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

最终输出:[1, 2, 4, 6, 7, 8, 9]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/585146
推荐阅读
相关标签
  

闽ICP备14008679号