算法之LOWB三人组之选择排序

选择排序

思想是在一个列表中每次循环一遍,拿到最小值,接着再从剩下的无序区中继续拿最小值,如此循环,直到结束。

# 最简单的一个选择排序,循环一个列表,拿到最小值,添加到一个新列表,之后在列表中删除这个最小值,继续再剩下的值中找最小值,往复循环。
def select_sort_simple(li):
    new_li = []
    for i in range(len(li)):
        min_val = min(li)
        new_li.append(min_val)
        li.remove(min_val)
    return new_li

这个算法有明显的缺点,因为是生成了两个列表,占用空间

正宗的选择排序

def select_sort(li):
    for i in range(len(li)-1):  # 需要选择n-1趟,最后一次不需要再找了
        min_loc = i  # 我们把每次得到的最小值放到第一位,刚开始假定最小值的索引就是i
        # 剩下的无序区则为 i,len(i),顾头不顾尾
        for j in range(i+1, len(li)):
            #  接下来遍历无序区找比假定的min_loc的值还小的
            if li[j] < li[min_loc]:
                min_loc = j
        # 如果最小值不是假定的i,一旦找到,交换最小值位置
        if min_loc != i:
            li[min_loc], li[i] = li[i], li[min_loc]
        print(li)
li = [3, 2, 1, 4, 8, 7, 6, 5]

select_sort(li)

看这个的查找步骤,先把第一次的3作为了最小值,然后去循环剩下的[2,1,4,8,7,6,5],一旦找到了1
就把1和3的位置进行了调换,得到了[1,2,3,4,8,7,6,5]
此时最小值为2,过,最小值为3,过,最小值为4,过
直到最小值为8,5和8调换,最小值7,6和7掉换,最后一位不走,程序结束

原文地址:https://www.cnblogs.com/lishi-jie/p/9912281.html

时间: 2024-08-03 15:17:48

算法之LOWB三人组之选择排序的相关文章

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

算法之LOWB三人组之插入排序

插入排序 思想:类似于抽扑克牌,共有8张扑克牌,手里默认有一张,桌面上有7张,我们每次从桌面上抽一张和手里的牌进行比较,如果比手里的牌大,则直接放到手里的牌的后面,如果比手里的牌小,则放到手里的牌的前面,保证你放的每一次都会产生一个有序区.当牌完的时候,这8张牌也就排好了顺序.这就是插入排序 时间复杂度为O(n^2) def insert_sort(li): for i in range(1, len(li)): tmp = li[i] # 摸到的牌存一个变量中 j = i - 1 # 模到的牌

lowB 三人组

lowB 三人组 1.冒泡排序 2.选择排序 3.插入排序 1.冒泡排序 #冒泡排序法:竖看,一一比较,把大的放在最顶. 每两个相邻的数,如果前边的比后边大就交换这两个数. ''' 分析: 1.本来为无序区,没进行一趟冒泡,就有一位进入有序区,无序区就-1 2.正常来说:一个列表需要走N趟冒泡,但是,最后一位数其实是不需要走了,就是 N-1 趟 3.i 表示趟数,j 表示 箭头 2.时间复杂度:O(N2) ''' import random def bubble_sort(x): for i i

排序算法分析【三】:选择排序(附Python&amp;C++代码)

原理 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换.在所有的完全依靠交换去移动元素

算法效率的分析--【以选择排序与冒泡排序为基础】

在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析下算法的效率问题: 首先我们把两种排序算法的概念重温一遍: 选择排序:在每一轮中,找出最小的元素放在他最终的位置.挺起来有些别扭,我们举个实例: eg:        8, 5,1, 20, 6, 3 1ed······  1, 5,8, 20, 6, 3 2ed······  1, 3, 8,20, 6,5 3ed······  1, 3,5, 20, 6, 8 4ed······  1, 3,  5, 6,  20,8 5

排序算法lowb三人组-选择排序

def get_min_pos(li): min_pos = 0 for i in range(1, len(li)): if li[i] < li[min_pos]: min_pos = i return min_pos def select_sort(li): for i in range(len(li)-1): # n或者n-1趟 # 第i趟无序区范围 i~最后 min_pos = i # min_pos更新为无序区最小值位置 for j in range(i+1, len(li)): i

算法排序-lowB三人组

冒泡排序思路: 选择排序思路: 插入排序思路: 小结: 详细代码解释看下一篇 原文地址:https://www.cnblogs.com/52-qq/p/8398957.html

算法学习之排序算法(三)(选择排序法)

1.引言 选择排序工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法.选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换.怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2, 4, 5, 9 第四次排序:

算法总结之 单链表的选择排序

给定一个无序单链表的头节点head,实现单链表的选择排序 要求额外空间复杂度O(1) 思路: 既然额外空间复杂度O(1),就不能把链表装进容器,排好序后再从新链接,而是要求面试者在原链表上利用有限几个变量完成选择排序的过程. 选择排序是从未排序的部分找到最小值,然后放到排好序部分的尾部. 1 开始时默认真个链表都是未排序的部分,对于找到的最小值节点肯定是整个链表的最小值节点,将其设置为新的头节点记:newHead 2 每次在排序的部分中找到最小值的节点,然后哦把这个节点从未排序的链表删除,删除的