[排序算法]选择排序法

目录

1.基本思想

2.冒泡排序的步骤

3.冒泡排序算法的实现

4.时间复杂度分析

5.总结


1.基本思想

选择排序(Selection Sort)是一种简单直观的排序算法,它的基本思想是分多次遍历待排序的序列,每次遍历都找到序列中的最小(或最大)元素,然后将这个元素与序列的当前位置进行交换。这个过程重复进行,直到整个序列被排序完成。

2.冒泡排序的步骤

冒泡排序的具体步骤如下:

  1. 初始化:将序列的第一个元素作为参照点,假设它是最小的。

  2. 寻找最小元素:从序列的第二个元素开始,遍历整个序列,寻找比参照点还小的元素。

  3. 交换:如果找到了比参照点还小的元素,就将它与参照点交换位置。

  4. 移动参照点:将参照点向右移动一位,重复步骤2和3,直到整个序列都被遍历。

  5. 完成排序:当参照点移动到序列的最后一个元素时,整个序列就被排序完成了

3.冒泡排序算法的实现

以下是冒泡排序算法的Java实现示例:

java 复制代码
package com.test.demo;

public class SelectionSortExample {

    public static void main(String[] args) {
        int[] numbers = {64, 34, 25, 12, 22, 11, 90};
        selectionSort(numbers);
        System.out.println("Sorted array: ");
        for (int number : numbers) {
            System.out.print(number + " ");
        }
    }

    public static void selectionSort(int[] array){
        int min ;
        int tmp;
        int length = array.length;
        for (int i=0,len =length-1;i<len;i++){
            min =i;
            //每轮需要比较的次数 N-i
            for (int j=i+1;j<length;j++){
                if(array[min ]>array[j]){
                    // 记录目前能找到的最小值元素的下标
                    min =j;
                }
            }
            // 将找到的最小值和i位置所在的值进行交换
            if(min >i){
                tmp = array[i];
                array[i]=array[min ];
                array[min ]=tmp;
            }
        }
    }
}

4.时间复杂度分析

选择排序的时间复杂度是O(n^2),其中n是序列的长度。这是因为算法需要进行n-1次遍历来找到最小的元素,然后进行n-2次遍历,依此类推,直到最后一次只需要进行一次遍历。

5.总结

选择排序的一个优点是它不涉及复杂的递归调用,因此对于小型数据集或者对于递归深度有限制的环境,它可能是一个不错的选择。然而,对于大型数据集,由于其时间复杂度较高,通常不推荐使用选择排序。

相关推荐
Dream it possible!41 分钟前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊1 小时前
算法之双指针系列(一)
算法·leetcode
十二1 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方2 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi3 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH3 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi4 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
東隅已逝,桑榆非晚6 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom7 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战
bro_Java6667 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法