Java算法 选择排序算法 -- 选择排序算法的非递归和递归形式实现

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java算法 选择排序算法 -- 选择排序算法的非递归和递归形式实现相关的知识,希望对你有一定的参考价值。

1. 选择排序算法

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。


1.1 算法步骤

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。

1.2 动图演示


1.3 代码实现(非递归和递归形式实现)

package recursion;

import java.util.Arrays;

/**
 * ClassName: SelectSort
 * Description: 选择排序的递归算法(递归 & 非递归)
 *
 * @author Tianjiao
 * @date 2021/10/9 11:27
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] intArr = {1, 5, 6, 2, 3, 4, 0, 7};
        System.out.println("选择排序算法的结果是:    " + Arrays.toString(selectSort(intArr)));
        System.out.println("选择递归排序算法的结果是: " + Arrays.toString(selectSortRecursion(intArr, 0)));
    }

    /**
     * 选择排序算法
     */
    public static int[] selectSort(int[] sourceArray) {
        int[] intArr = Arrays.copyOf(sourceArray, sourceArray.length);
        // 总共要经过 N-1 轮比较
        for (int i = 0; i < intArr.length - 1; i++) {
            int minIndex = i;
            // 每轮需要比较的次数 N-i
            for (int j = i + 1; j < intArr.length; j++) {
                if (intArr[j] < intArr[minIndex]) {
                    // 记录目前能找到的最小值元素的下标
                    minIndex = j;
                }
            }
            // 将找到的最小值和i位置所在的值进行交换
            if (i != minIndex) {
                int tmp = intArr[i];
                intArr[i] = intArr[minIndex];
                intArr[minIndex] = tmp;
            }
        }
        return intArr;
    }

    /**
     * 选择递归排序算法
     */
    public static int[] selectSortRecursion(int[] intArr, int pos) {
        int length = intArr.length;
        for (int i = pos; i < length - 1; i++) {
            if (intArr[i + 1] < intArr[pos]) {
                int temp = intArr[i + 1];
                intArr[i + 1] = intArr[pos];
                intArr[pos] = temp;
            }
        }
        if (pos < length) { //递归入口,当条件不满足时,递归结束
            selectSortRecursion(intArr, pos + 1);
        }
        return intArr;
    }
}

运行结果:



以上是关于Java算法 选择排序算法 -- 选择排序算法的非递归和递归形式实现的主要内容,如果未能解决你的问题,请参考以下文章

(Java)八大排序算法总结

十大经典排序算法的算法描述和代码实现

排序算法:简单选择排序算法-Java实现

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

java基础算法-选择排序