排序算法 - (简单)选择排序 (Selection Sort)

排序算法 - (简单)选择排序 (Selection Sort)

June 20, 2018

基本思路

假设按照从小到大排列,总共有n个元素

  • 第一轮,找出数组中最小的元素,与第一个元素交换
  • 第二轮,找出剩余元素中最小的元素,与第二个元素交换
  • 第三轮,找出剩余元素中最小的元素,与第三个元素交换
  • 如此重复上述步骤,直至处理完所有元素

性能

时间复杂度:O(n2)

空间复杂度:O(1)

示例代码

更多详情可点击链接参考示例代码

private static int[] selectionSort(int[] unsortedArray) {
    int minIndex;
    for (int round = 0; round < unsortedArray.length; round ++) {
        // Should have N rounds

        minIndex = round;

        for (int j = round + 1; j < unsortedArray.length; j ++) {
            if (unsortedArray[minIndex] > unsortedArray[j]) {
                minIndex = j;
            }
        }

        if (minIndex != round) {
            int temp = unsortedArray[minIndex];
            unsortedArray[minIndex] = unsortedArray[round];
            unsortedArray[round] = temp;
        }
    }

    return unsortedArray;
}

跑一下测试数据,可以看到类似于下面的结果

Before sort: 3, 2, 9, 6, 0, 4, 8, 5, 7, 1
After round 1: 0, 2, 9, 6, 3, 4, 8, 5, 7, 1
After round 2: 0, 1, 9, 6, 3, 4, 8, 5, 7, 2
After round 3: 0, 1, 2, 6, 3, 4, 8, 5, 7, 9
After round 4: 0, 1, 2, 3, 6, 4, 8, 5, 7, 9
After round 5: 0, 1, 2, 3, 4, 6, 8, 5, 7, 9
After round 6: 0, 1, 2, 3, 4, 5, 8, 6, 7, 9
After round 7: 0, 1, 2, 3, 4, 5, 6, 8, 7, 9
After round 8: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
After round 9: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
After round 10: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
After sort: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

最后更新于