算法------排序算法------选择排序法

介绍

选择排序法也算是枚举法的应用,就是反复从未排序的数列中去除最小的元素加入到另一个数列中,最后的结果即为已排序的数列。选择排序法可以使用两种方式排序,即在所有的数据中,若从大到小排序,则将最大值放入第一个位置;若是从小到大排序,则将最小值放入到第一个位置。例如以下示例:
从数列56 24 86 63 16按从小到大的顺序排列,其验算流程大致为以下步骤:
在这里插入图片描述

  1. 首先找到次数列中最小值,并于数列中的第一个元素交换位置,如下图所示:
    算法------排序算法------选择排序法_第1张图片
  2. 从第二个值开始,找到次数列中最小值(不包含第一个值),再与第二个值交换,如图所示:
    算法------排序算法------选择排序法_第2张图片
  3. 从第三个值开始,找到次数列中最小值(不包括第一,第二值),再与第三个值交换,如图所示:
    算法------排序算法------选择排序法_第3张图片
  4. 从第四个值开始,找到此数列中最小值(不包括第一,第二,第三值),再与第四个值交换位置,如图所示:
    算法------排序算法------选择排序法_第4张图片
    至此该数列的扫描流程就说完了,下面来说下该排序算法。

选择排序算法分析

  1. 无论最坏情况,最好情况和平均情况都需要找最大值(或最小值),因此其比较次数为(n-1)(n-2)(n-3)…3+2+1=n(n1)/2此,其时间复杂度为O(n^2)
  2. 由于选择排序是以最大值(最小值)直接与前方未排序的1键值交换,数据排列顺序很有可能被改变,因此它不是稳定排序。
  3. 因为只需要一个额外的空间,所以空间复杂度为最佳。
  4. 比较适用于数据量小或有部分数据已经排过序的情况。

代码实现

package com.lifly.algorithm.sort;

/**
 * @Author: LiFly
 * @Date: 2023/6/25 23:10
 * @Description: 快速排序
 */
public class QuickSort {

    public static void main(String[] args) {

        int[] data = {56, 24, 86, 63, 16};
        System.out.print("原始数据为: ");
        QuickSort quickSort = new QuickSort();
        quickSort.showData(data);
        quickSort.sort(data);
    }

    /**
     * 打印输出
     *
     * @param data
     */
    public void showData(int[] data) {
        for (int datum : data) {
            System.out.print(datum + " ");
        }
        System.out.println("\n");
    }

    /**
     * 快速排序
     *
     * @param data
     */
    public void sort(int[] data) {
        for (int i = 0; i < data.length; i++) {
            int smallest = data[i];
            int index = i;
            int temp;
            for (int j = i+1; j < data.length; j++) {
                if (smallest > data[j]) {
                    smallest = data[j];
                    index = j;
                }
            }
            temp = data[index];
            data[index] = data[i];
            data[i] = temp;
            System.out.print("第"+(i+1)+"次排序结果: ");
            for (int datum : data) {
                System.out.print(datum+" ");
            }
            System.out.println("\n");
        }
        System.out.println("\n");
    }
}

结果显示
算法------排序算法------选择排序法_第5张图片
快速排序算法到此就结束了。如果觉得笔者写的能让你学到点东西,麻烦点个关注,感激不尽。喜欢看微信公众号的也可以搜索微信公众号liflyCode那里也有收录

你可能感兴趣的:(算法,java,排序算法,算法,java,选择排序)