排序算法-选择排序

排序算法-选择排序

选择排序的基本思想是从数组的第一个元素开始查找剩余元素中的最小值,再将查找到的最小值与第一个元素比较,若小于第一个元素值则互换,然后进行第二次选择,从第二个元素之后开始查找最小值再比较,这样一直查找到只剩下一个元素。思想就是每次选择最小值,直到只剩一个元素。时间复杂度O(n^2),空间复杂度O(1)。

举例说明

数组:| 5 | 4 | 3 | 2 | 1 |

第一次遍历

首先查找第一个元素5之后的最小值,找到1后与5比较, 由于1<5所以将两数互换后得到数组| 1 | 4 | 3 | 2 | 5 | 。

第二次遍历

查找第二个元素4之后的最小值,找到2后与4比较,由于2<4所以将两数互换后得到数组| 1 | 2 | 3 | 4 | 5 | 。

第三次遍历

查找第三个元素3之后的最小值,找到4后与3比较,由于4>3所以不做任何操作,进行下一步。

第四次遍历

查找第四个元素4之后的最小值,找到5后与4比较,由于5>4所以不做任何操作,进行下一步。

第五次遍历

第五个元素5之后没有元素,跳出循环结束排序。

代码

void select_sort(int *arr, int len){
    for(int i=0; i < len; i++){
        int index = i;
        for(int j = i + 1; j < len; j++){
            if(arr[j] < arr[index])
                index = j;
        }
        if(index != i){
            int temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值