排序基础 01 选择排序

本文深入探讨了排序算法的基础知识,特别是选择排序算法。文章解释了为什么即使存在更高效的算法,学习O(n^2)复杂度的排序算法仍然至关重要。通过一个具体的Java实现示例,展示了选择排序的基本原理和步骤,包括寻找最小元素并将其放置于正确位置的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 排序算法最理想的时间复杂度是O(nlogn);
  • 为什么要学O(n^2)的排序算法?
    • 基础;
    • 编码简单,易于实现,是一些简单情景的首选;
    • 在一些特殊的情况下,简单的排序算法更有效;
    • 简单的排序算法思想衍生出复杂的排序算法(希尔排序基于插入排序);
    • 作为子过程,改进更复杂的排序算法;

算法描述

  • 每一次遍历,找出最小的元素,放在本次遍历的起点;

算法实现

public class SelectionSort {

    private SelectionSort() {}

    public static void sort(int[] arr) {
        for(int i = 0; i < arr.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            swap(i, minIndex, arr);
        }
    }

    private static void swap(int i, int minIndex, int[] arr) {
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
        sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

}

输出:

1 2 3 4 5 6 7 8 9 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值