• 数据结构与算法:选择排序(原理讲解+python实现)


    选择排序

    选择排序是一种经典、简便的排序算法。在初级软件工程师的笔试面试中也经常出现 是基础入门的算法之一

    原理讲解

    Python实习

     1 def selectionSort(arr, n):
     2     for i in range(n):
     3         min = i
     4         for j in range(i+1, n):
     5             if arr[j] < arr[min]:
     6                 min = j
     7 
     8         if min != i:
     9             arr[min], arr[i] = arr[i], arr[min]
    10 
    11 
    12 if __name__ == '__main__':
    13     # 将数组升序拍戏
    14     # 1.将第一个元素作为min元素 在数组中第二个到最后的元素中找一个更小的元素 与min调换
    15     # 2.第一个元素为数组最小元素 在第三个到最后元素中找最小元素与第二个元素替换
    16     # 循环上一次步骤 至最后元素 得到排好序的数组
    17     arr = [30, 40, 60, 50, 10, 20]
    18     n = len(arr)
    19     selectionSort(arr, n)
    20     print(arr)

    时间、空间复杂度、稳定性分析

    选择排序的时间复杂度是O(n2) 当列表有序时 排序次数n-1次 O(n) 当列表倒序时 排序次数(n-1)(n-2)/2次 O(n2) 平均复杂度O(n2).

    选择排序的空间复杂度是O(1) 期间没有涉及到新建列表 唯一需要新的内存是存储交换元素时 存放临时变量的内容。

    选择排序是不稳定的排序 在有序表与无序表元素交换的过程中,会破坏相等元素的前后顺序 比如[5, 5, 3, 8, 9] 第一躺需要交换第一个5和3时 两个5的顺序就相反了

    总结

     总体来讲,和冒泡排序在效率性能上是极为相似的 不同是选择排序是不稳定的排序 也正因为如此 应用上冒泡排序占些优势。当对于初学算法的童鞋来讲 这些基本的排序都应该能够深入理解起原理才行。

  • 相关阅读:
    Another mysql daemon already running with the same unix socket
    cloud maintenance of OpenNebula
    内核分析阅读笔记
    eucalyptus,openNebula云构建漫谈
    quotation
    Adress
    cos
    COS回应7大质疑
    linux内核地址mapping
    开源 免费 java CMS
  • 原文地址:https://www.cnblogs.com/confessionlouis/p/14272663.html
Copyright © 2020-2023  润新知