Java常用算法——选择排序

来源:互联网 发布:数据存储加密解决方案 编辑:程序博客网 时间:2024/06/05 17:37

选择排序

时间复杂度:O(n²),假设有n个数据,数据交换的次数最多有n-1次,但程序比较的次数较多

空间复杂度:O(1),只需要一个附加程序单元用于交换

选择排序算法的关键就是n-1趟比较,每趟比较的目的就是选择出本趟比较中最小的数据,并将该数据放在本趟比较的第一位

选择排序每趟比较最多只需交换一次,只要找到本趟比较中最小的数据,然后拿它和本趟比较中第一位的数据交换

每趟比较的目的只是找出本趟比较中最小数据的索引,选择排序的第n趟比较至多交换一次,总是拿n-1位的数据和中间某项数据(本趟比较中最小的数据)进行交换

如果本趟比较第n-1位已经是最小,那就无需交换

图解选择排序

代码:

生成随机数组的工具类

package com.algorithm.utils;import java.util.Random;public class ArraysUtil {    private static Random rand = new Random();    /**     * 返回长度为size,并且数组中元素的大小范围为[begin, end)的int数组     */    public static int[] makeIntArray(int begin, int end, int size) {        int[] nums = new int[size];        for(int i = 0; i < size; i++) {            nums[i] = begin + rand.nextInt(end - begin);        }        return nums;    }}

选择排序代码:

package com.algorithm.sort;import java.util.Arrays;import com.algorithm.utils.ArraysUtil;public class S02_SelectionSort {    private static final int SIZE = 10;    public static void selectionSort(int[] nums) {        int index;        int temp;        for(int i = 0; i < nums.length - 1; i++) {            index = i; // 永远保留本趟比较中最小值的索引            for(int j = i+1; j < nums.length; j++) {                if(nums[j] < nums[index]) {                    index = j;                }            }            if(index != i) {                temp = nums[i];                nums[i] = nums[index];                nums[index] = temp;            }            System.out.print("第" + (i+1) + "次排序的结果为:");            System.out.println(Arrays.toString(nums));        }    }    public static void main(String[] args) {        int[] nums = ArraysUtil.makeIntArray(10, 100, SIZE);        System.out.print("排序前的数组为:");        System.out.println(Arrays.toString(nums));        selectionSort(nums);        System.out.print("排序后的数组为:");        System.out.println(Arrays.toString(nums));    }}

结果:(由于数组随机产生,每次结果都不一样)

排序前的数组为:[24, 60, 71, 18, 34, 69, 53, 81, 62, 53]第1次排序的结果为:[18, 60, 71, 24, 34, 69, 53, 81, 62, 53]第2次排序的结果为:[18, 24, 71, 60, 34, 69, 53, 81, 62, 53]第3次排序的结果为:[18, 24, 34, 60, 71, 69, 53, 81, 62, 53]第4次排序的结果为:[18, 24, 34, 53, 71, 69, 60, 81, 62, 53]第5次排序的结果为:[18, 24, 34, 53, 53, 69, 60, 81, 62, 71]第6次排序的结果为:[18, 24, 34, 53, 53, 60, 69, 81, 62, 71]第7次排序的结果为:[18, 24, 34, 53, 53, 60, 62, 81, 69, 71]第8次排序的结果为:[18, 24, 34, 53, 53, 60, 62, 69, 81, 71]第9次排序的结果为:[18, 24, 34, 53, 53, 60, 62, 69, 71, 81]排序后的数组为:[18, 24, 34, 53, 53, 60, 62, 69, 71, 81]
原创粉丝点击