直接选择排序算法

直接选择排序(Straight Selection Sort),是一种比较简单的选择排序方法。它的基本思想是:第一次从待排序的序列中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。在直接选择排序过程中存在大跨度的数据移动选择排序是不稳定的排序方法

要点:每一次循环都选出未排序号序列中最小(大)元素,然后放在已排序好的末尾

测试用例: 使用直接选择排序算法将数组 { 36,80,45,66,22,9,16,36 } 进行升序排序

在这里插入图片描述

代码实现

    /**
     * 直接选择排序
     * @param nums 数组
     * @param size 数组大小
     * @return 返回排列好的数组
     */
    public int[] StraightSelectionSorting(int[] nums, int size){
        int position;   // 用于循环遍历数组的下标
        int min, temp, j;   // min最小值的下标,temp用于将最小值与当前循环position下标的值交换使用
        for (position = 0; position < size - 1; position++) {   // 循环遍历数组
            min = position;     // 获取当前元素的下标
            for (j = position + 1; j < size; j++) {     // 寻找当前未排序序列中的最小值
                if (nums[min] > nums[j])
                    min = j;
            }
            if (position != min) {      // 如果当前最小值的位置与外循环位置的初始值不一致,则需要交换两个元素的位置
                temp = nums[position];  // 说明还有比position位置的值更小的元素
                nums[position] = nums[min];
                nums[min] = temp;
            }
        }
        return nums;
    }

时间复杂度:元素的比较次数和序列中的初始记录无关,其比较次数为: ∑ i = 1 n − 1 ( n − i ) \sum_{i=1}^{n-1} (n-i) i=1n1(ni) = 1 2 n 2 \frac{1}{2}n^2 21n2 - 1 2 n \frac{1}{2}n 21n,总交换次数不超过 n − 1 n-1 n1 次。当待排序初始序列为正序时,不发生交换;当初序列为逆序时,发生 n − 1 n-1 n1 次交换,即移动次数最多 n − 1 n-1 n1 次。因此,直接选择排序的平均时间复杂度为 O ( n 2 ) O(n^2) O(n2)

空间复杂度
在直接选择排序的过程中,只需要一个元素大小的辅助空间用于存放待插入的元素,因此空间复杂度为 O ( 1 ) O(1) O(1)

  • 9
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naijia_OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值