排序算法-直接选择(Java实现)

    直接选择是简单排序,算法思想是从第一个数字开始,与后面的每个数字进行比较,如果该数字小了,那么就把两数进行交换,这样一轮下来第一个数字肯定是最小的数字,然后第二个数字开始与后面的数字进行比较,思想是一样的,这样的话,第二小的数字就到了第二个位置,这样依次类推,排序就完成了。
来举一组例子:
在这里插入图片描述
这样一组数字进行选择排序

  1. 先拿到第一个数字5,然后与4进行比较,发现4小,然后5和4进行交换
    在这里插入图片描述
    在这里插入图片描述
  2. 然后现在4就变成了选中数字,继续进行比较,和1进行比较发现1小
    在这里插入图片描述
    在这里插入图片描述
  3. 这样1变成了选中数字,再与7比较发现不用交换,陆续与6,4,3,2比较都不用交换,这样我们的第一趟就完成了,我们可以发现,第一躺完成了以后第一个位置就是最小的数字,然后我们选中第二个位置5,与后面进行比较,完成第二趟排序
    在这里插入图片描述
    第二个小的数字就变到了第二个位置,这样依次类推就完成了选择排序

代码实现

public static void selectSort(int[] array) {
    int temp = 0;
    for (int i = 0; i < array.length-1; i++) {
        for (int j = i+1; j < array.length; j++) {
            if(array[i] > array[j]) {
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
}

选择排序是选中一个位置,然后不停的与后面的所有位置进行交换,是跳跃交换的,所以是不稳定的

特点:

不稳定
选择排序不论在何种情况下,都不会break跳出循环,所以它的最优最坏和平均时间复杂度都为O(n2)

最优时间复杂度:

O(n2)

最坏时间复杂度:

O(n2)

平均时间复杂度:

O(n2)
选择排序直接进行交换,不依赖数组,所以空间复杂度为O(1)

空间复杂度:

O(1)

猜你喜欢

转载自blog.csdn.net/weixin_42220532/article/details/88424625