zoukankan      html  css  js  c++  java
  • python 排序算法

    冒泡排序

    算法思想:

    1、相邻元素对比,如果前面元素比后面的大,进行交换,直至最后一个元素,一轮结束之后,最后一个元素为最大值;
    2、后一轮进行的列表数量比前一轮少一个;
    3、反复进行上面两步,直至没有元素进行对比为止.

    复杂度:

    冒泡排序的平均复杂度为O(n2),当原列表为正序排列时,复杂度为O(n),为倒序排列时,复杂度为O(n2),比较次数为n*(n-1)/2,关键字移动次数为n*(n-1)/4

    稳定性:

    稳定。列表中每次交换是相邻元素之间的交换,如果相邻的两个元素相等,不会出现交换情况,因而相同元素的前后顺序没有发生改变,故而冒泡排序为稳定排序算法

    代码:

    def bubble_sort(array):
        for i in range(len(array) - 1):  # 这个循环负责设置冒泡排序进行的次数
            for j in range(len(array) - i - 1):  
                if array[j] > array[j + 1]:
                    array[j], array[j + 1] = array[j + 1], array[j] #交换
        return nums
    

    选择排序

    算法思想:

    1、初始状态中有序序列为空,无序序列为列表长度;
    2、将第一个元素与其余元素对比,如果第一个元素大于第二个元素,将min下标替换为第二个元素,依此类推,获取最小元素的下标,与i替换;
    3、此时有序序列为1,无序序列列表长度-1;
    4、将剩余的无序序列反复进行第二步,直至无序序列为1;

    复杂度:

    选择排序的平均复杂度为O(n2)。每进行一轮操作,最多交换一次,因此交换操作介于0与n-1之间,比较操作次数为n*(n-1)/2

    稳定性:

    不稳定。一个list,如果第一个元素与第四个元素相同,进行比较时,最小元素在第四个元素之后,第一个元素与最小元素交换,此时两个相等的元素已经失去原有的前后顺序,故不稳定。比如列表[3,9,7,3,4,1,2],为了方便理解,在列表后面添加对应的下标[3(0),9(1),7(2),3(3),4(4),1(5),2(6)],列表无序,将第一个元素与其他元素做对比,发现元素值为1,下标为5为最小值,因此将3(0)与1(5)进行交换,得到的序列结果为[1(5),9(1),7(2),3(3),4(4),3(0),2(6)],由此可见,两个相同的元素3,顺序发生了改变,故而不稳定。

     

    代码:

     def selection_sort(list2):
         for i in range(0, len (list2)-1):
             min_ = i
             for j in range(i + 1, len(list2)):
                 if list2[j] < list2[min_]:
                     min_ = j
             list2[i], list2[min_] = list2[min_], list2[i]  # swap
    

      

     

  • 相关阅读:
    (64)通信协议之一xml
    (63)通信协议之一json
    (61)C语言预处理命令详解
    (60) 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用
    (59)Linux操作系统深入应用
    (58)PHP开发
    (57)Linux驱动开发之三Linux字符设备驱动
    (56)Linux驱动开发之二
    (55)Linux驱动开发之一驱动概述
    (54)LINUX应用编程和网络编程之九Linux网络通信实践
  • 原文地址:https://www.cnblogs.com/qing0228/p/10618681.html
Copyright © 2011-2022 走看看