zoukankan      html  css  js  c++  java
  • 排序算法之 '选择排序'

    选择排序

    原理如下:

    1. 首先假定数组中最大元素的下标为 0 , 即数组中的第一个元素
    2. 通过 for 循环,将第一个元素剩余元素逐一比较,比较过程中,如:第一个元素大于第二个元素,则更改最大元素的下标为 1,依次类推得到数组中真实的最大元素,将此最大元素放置在数组的最后位置,注意数组中的最大元素的位置已确定,不再更换
    3. 重复上述操作(除去数组中最大元素不参与比较)可以依次确定数组中的第二大、第三大等元素的位置。
    4. 直至整个数组都已顺序排列为止。

    算法稳定性

    选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个 元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么 交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法

    Python实现

    def choose_sort(lst):
        length = len(lst)
        for j in range(length):
            max_index = 0
            for i in range(1, length - j):
                if lst[max_index] < lst[i]:
                    max_index = i
            lst[max_index], lst[length - 1 - j] = lst[length - 1 - j], lst[max_index]
        return lst
    
    
    if __name__ == '__main__':
        lst = [3, 4, 5, 7, 1, 2, 6, 9, 0]
        print(choose_sort(lst))
        
     
    # [0, 1, 2, 3, 4, 5, 6, 7, 9]
    
  • 相关阅读:
    tars go版本源码分析
    goim源码阅读
    vue weixin源码解读
    避免加锁的骚操作
    git一些常用操作
    eclipse 的习惯配置
    ai资源站
    转载 github上的一些安全资源收集
    转载 一个统计代码行数的python脚本
    C语言开发工具
  • 原文地址:https://www.cnblogs.com/fengting0913/p/13329338.html
Copyright © 2011-2022 走看看