• 冒泡排序、插入排序、选择排序、桶排序


    冒泡排序

    冒泡排序的时间复杂度是O(N2)

    冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置

    def bubbleSort(n):

        for j in range(len(nums)-1):     # 这个循环负责设置冒泡排序进行的次数,同时后面程序取用j的值

            for i in range(len(nums)-j-1):   # j为列表下标

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

                    nums[i], nums[i+1] = nums[i+1], nums[i]

        return nums

    nums = [5,2,45,6,8,2,1]

    print bubbleSort(nums)

    优缺点: 冒泡排序解决了桶排序浪费空间的问题, 但是冒泡排序的效率特别低

    插入排序

    每次将一个待排序的数据,跟前面已经有序的序列的数字一一比较找到自己合适的位置,插入到序列中,直到全部数据插入完成。

    def insertSort(nums):

        for i in range(len(nums)):

            position = i

            while position>0:

                if nums[position-1]>nums[position]:

                    nums[position-1], nums[position] = nums[position], nums[position-1]

                position -= 1

        return nums

    nums = [8,4,5,7,2,5,1]

    print insertSort(nums)

    选择排序

    选择排序每次只记录最大数的索引值. 类似于冒泡排序, 也是要比较n-1次, 区别是冒泡排序每次都交换, 选择排序只在最后比较完后才进行交换

    def selectSort(nums):

        for i in range(len(nums)):

            max_index = 0

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

                if nums[max_index] < nums[j]:

                    max_index = j

            nums[max_index], nums[len(nums)-i-1] = nums[len(nums)-i-1], nums[max_index]

        return nums

    nums = [6,2,54435,3141]

    print selectSort(nums)

    桶排序

    桶排序非常浪费空间, 比如需要排序的范围在0~2000之间, 需要排序的数是[3,9,4,1000], 同样需要1001个空间

    注意: 通排序不能排序小数

    def bucketSort(nums):

        # 选择一个最大的数

        max_num = max(nums)

        # 创建一个元素全是0的列表, 当做桶

        bucket = [0]*(max_num+1)

        # 把所有元素放入桶中, 即把对应元素个数加一

        for i in nums:

            bucket[i] += 1

        # 存储排序好的元素

        sort_nums = []

        # 取出桶中的元素

        for j in range(len(bucket)):

            if bucket[j] != 0:

                for y in range(bucket[j]):

                    sort_nums.append(j)

        return sort_nums

    nums = [5,6,3,2,1,65,2,0,8,0]

    print bucketSort(nums)

  • 相关阅读:
    ln 命令使用
    python 调用浏览器方法
    Git新手必备常用命令
    Spring 整合 Hibernate 入门
    看看什么是Guice
    maven 详解,其它这几篇文章也不错
    shell编程中date用法(转)
    通过scp实现vps控制没有外网IP的localhost
    centos6.6安装python2.7
    Cygwin配置
  • 原文地址:https://www.cnblogs.com/yongfuxue/p/10096644.html
Copyright © 2020-2023  润新知