美文网首页
python排序

python排序

作者: huxt | 来源:发表于2019-07-12 21:19 被阅读0次

1.冒泡排序

def bubble_sort(nums):

    for i in range(len(nums) - 1):

        for j in range(len(nums) - i - 1):

            if nums[j] > nums[j + 1]:

                nums[j], nums[j + 1] = nums[j + 1], nums[j]

    return nums

if __name__ == "__main__":

    data = [1,2,5,2,99,3,67,45,12,4,78,90]

    date = bubble_sort(data)

    print(date)


关于冒泡排序的时间复杂度,在上面python实现的代码中时间复杂度是 ,当然可以再考虑一下极端的情况:当队列已经从小到大排好序或者从大到小排好序,从小到大排好顺序时可以只扫描一遍就结束排序,此时时间复杂度为O(n),如果是从大到小,那么就需要扫描n-1次,同时需要比较交换n-1次,时间复杂度为 。

2.选择排序算法

def select_sort(items):

    n = len(items)

    for cur in range(n-1):

      item_max = cur

      for i in range(cur+1, n):

          if items[i] > items[item_max]:

              items[i], items[item_max] = items[item_max], items[i]

      if item_max != cur:

          items[cur], items[item_max] = items[item_max], items[cur]

if __name__ == "__main__":

    a = [3,6,4,2,11,10,5]

    select_sort(a)

    print(a)


关于选择排序的时间复杂度:

选择排序的交换操作介于 0 和 (n - 1) 次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

相关文章

网友评论

      本文标题:python排序

      本文链接:https://www.haomeiwen.com/subject/chfukctx.html