选择排序讲解

介绍

选择排序(Selction Sort)是一种简单直观的排序方法。它的工作原理是:第一次从待排序的数组中选拔出max / min的一个元素,存放在序列的起始位置,然后再从剩余的未排序的元素中找出max / min的一个元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据个数为零。

分部解释一下
1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3)以此类推,直到所有元素均排序完毕。

但是选择排序不是一个稳定的算法

举例

从小到大排序
[5,6,3,1,4,2]
[1,6,3,5,4,2]
[1,2,3,5,4,6]
[1,2,3,5,4,6]
[1,2,3,4,5,6]
一般经过N次操作结束
每次O(N)
总O(N^2)

c++代码

void sort()
 {
     for(int i = 0;i < n;i ++)
     {
         int minIndex = i;
         for(int j = i + 1;j < n;j ++)
         {
             if(num[j] < nums[minIndex]) minIndex = j;
         }
     }
     swap(nums[i],nums[minIndex]);//交换当前和最小
}

 python代码

def selection_sort(num_list):
    length = len(num_list)
    if length <= 1:
        return num_list

    for j in range(length):
        # 假设第一个元素为最小元素
        min_num_index = j

        # 遍历未排序区域元素,以此和未排序区域的第一个元素做对比
        for i in range(j+1, length):
            if num_list[i] < num_list[min_num_index]:
                min_num_index = i

        # 交换位置
        num_list[min_num_index], num_list[j] = num_list[j], num_list[min_num_index]

   return num_list

有问题就问,文章有误请联系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值