首页 > 编程笔记 > Java笔记 阅读:8

简单选择排序算法(Java实现)

简单选择排序的基本思想是,假设待排序的元素序列有 n 个:
以此类推,直到没有待比较的元素,简单选择排序算法结束。

给定一组元素序列,其元素的关键字为(56,22,67,32,59,12,89,26),简单选择排序的过程如下图所示:


简单选择排序的算法描述如下:
public void SimpleSelectSort()
// 简单选择排序
{
    // 将第 i 个元素与后面的 [i + 1…n] 个元素进行比较,将值最小的元素放在第 i 个位置
    for (int i = 0; i < length - 1; i++) {
        int j = i;
        for (int k = i + 1; k < length; k++) // 值最小的元素的序号为 j
        {
            if (data[k] < data[j])
                j = k;
        }
        if (j != i) // 若序号 i 不等于 j,则需要将序号 i 和序号 j 的元素交换
        {
            int t = data[i];
            data[i] = data[j];
            data[j] = t;
        }
    }
}
简单选择排序在最好的情况下,其元素序列已经是非递减有序序列,不需要移动元素。在最坏的情况下,其元素序列是递减排列的,在每一趟排序的过程中都需要移动元素,因此需要移动元素的次数为 3(n-1)。

简单选择排序的比较次数与元素的关键字排列无关,在任何情况下,都需要比较 n(n-1)/2 次。

综合以上考虑,简单选择排序的时间复杂度为 O(n^2)。简单选择排序的空间复杂度为 O(1)。简单选择排序是一种不稳定的排序算法。

相关文章