简介

第一次从数组中查最小的元素,放到数组起始位置,然后从剩余的元素中找到最小的,放到数组有序部分末尾,依次这样查找排序,直至结束。

题目

给定一组数据进行选择排序,以 {9, 3, 4, 2, 0, 1, 5, 8}为例。

排序过程

image.png

时间复杂度O(N²)分析

第一次排序,需要比较N-1次;
第二次排序,需要比较N-2次;
......
第N-1次排序,需要比较1次;

比较次数=(N-1)+(N-2)+...+1=((1+ N-1)*(N-1))/2=N²/2 + N/2
所以时间复杂度为:O(N²)

代码

public class SortUtils {
    public void selectionSort(int[] arr) {
        if(arr == null || arr.length < 2) {
            return;
        }
        for(int i = 0, len = arr.length - 1; i < len; i++) {
            int minIndex = i;
            for(int j = i + 1; j < len + 1; j++) {
                minIndex = arr[j] < arr[minIndex] ? j :   minIndex;
            }
            swap(arr, minIndex, i);
        }
    }

    public void swap(int[] arr, int i, int j) {
        if(i == j) {
            return;
        }
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

一只鱼
49 声望1 粉丝

下一篇 »
冒泡排序