Java算法系列第六篇:选择排序算法详解

Java算法系列第六篇:选择排序算法详解

选择排序(Selection Sort)是一种简单的排序算法,适用于小规模数据的排序。它的基本思想是每次从待排序的序列中选择最小(或最大)的元素,将其放到序列的起始位置。本文将详细介绍选择排序的原理、实现及其优化方法。

一、选择排序的基本原理

选择排序的基本步骤如下:

  1. 初始状态:将序列分为已排序部分和未排序部分。
  2. 选择最小值:在未排序部分中找到最小的元素,将其与未排序部分的第一个元素交换位置。
  3. 重复步骤:重复以上步骤,直到整个序列排序完成。
二、选择排序的实现

下面是一个用Java实现的选择排序算法:

public class SelectionSort {

    public static void selectionSort(int[] arr) {
        int n = arr.length;

        for (int i = 0; i < n - 1; i++) {
            // 找到未排序部分的最小元素
            int minIndex = i;
            for (int j = i + 1; j < n; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }

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

    public static void main(String[] args) {
        int[] arr = {64, 25, 12, 22, 11};
        System.out.println("排序前:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();

        selectionSort(arr);

        System.out.println("排序后:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}
运行结果
排序前:
64 25 12 22 11 
排序后:
11 12 22 25 64 
三、选择排序的优化方法

选择排序的时间复杂度为O(n^2),适用于小规模数据的排序。为了提高选择排序的效率,可以考虑以下优化方法:

  1. 双向选择排序:同时选择最小和最大元素,分别放到序列的起始位置和末尾位置,从而减少遍历次数。
双向选择排序的实现:
public class DoubleSelectionSort {

    public static void doubleSelectionSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n / 2; i++) {
            int minIndex = i;
            int maxIndex = i;

            for (int j = i + 1; j < n - i; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
                if (arr[j] > arr[maxIndex]) {
                    maxIndex = j;
                }
            }

            // 将最小元素交换到前面
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;

            // 如果最大元素被交换到前面,需要更新最大元素的索引
            if (maxIndex == i) {
                maxIndex = minIndex;
            }

            // 将最大元素交换到后面
            temp = arr[maxIndex];
            arr[maxIndex] = arr[n - 1 - i];
            arr[n - 1 - i] = temp;
        }
    }

    public static void main(String[] args) {
        int[] arr = {64, 25, 12, 22, 11};
        System.out.println("排序前:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();

        doubleSelectionSort(arr);

        System.out.println("排序后:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}
运行结果
排序前:
64 25 12 22 11 
排序后:
11 12 22 25 64 
四、总结

选择排序是一种简单且稳定的排序算法,适用于少量数据的排序。通过双向选择排序,可以减少遍历次数,提高排序效率。在实际应用中,选择排序常用于小规模数据的排序和其他高级排序算法的优化。

希望大家多多点赞、关注和收藏!你的支持是我持续创作的动力!下期我们将详细讲解桶排序算法,敬请期待!


这篇文章详细介绍了选择排序的原理、实现及其优化方法。如果你有任何问题或建议,欢迎在评论区留言!

Java算法系列

  1. Java算法系列第一篇:排序算法概述与实现

  2. Java算法系列第二篇:快速排序算法详解

  3. Java算法系列第三篇:归并排序算法详解

  4. Java算法系列第四篇:堆排序算法详解

  5. Java算法系列第五篇:插入排序算法详解

  6. Java算法系列第六篇:选择排序算法详解

  7. Java算法系列第七篇:桶排序算法详解

  8. Java算法系列第八篇:基数排序算法详解

  9. Java算法系列第九篇:计数排序算法详解

  10. Java算法系列第十篇:希尔排序算法详解

  11. Java算法系列第十一篇:计数排序算法详解

  12. Java算法系列第十二篇:归并排序算法详解

  13. Java算法系列第十三篇:树排序算法详解

  14. Java算法系列第十四篇:外部排序算法详解

  15. Java算法系列第十五篇:分布式排序算法详解

  16. Java算法系列第十六篇:贪心算法详解

  17. Java算法系列第十七篇:动态规划详解

  18. Java算法系列第十八篇:图算法中的最短路径算法

  19. Java算法系列第十九篇:最小生成树算法详解

  20. Java算法系列第二十篇:图遍历算法详解

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿里渣渣java研发组-群主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值