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

    参考博客:http://blog.csdn.net/wangs0622/article/details/78690519

    http://www.cnblogs.com/alex3714/articles/5474411.html

    算法:

    1.冒泡排序

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法
    它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
    这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名
     1 # 冒泡排序
     2 def bubble(data_list=None):
     3     """
     4     冒泡算法
     5     :param data_list: 
     6     :return: 
     7     """
     8     # 要排序的列表
     9     # data_list = []
    10     loop_count=0
    11     for j in range(len(data_list)):
    12         for i in range(len(data_list)-j-1):
    13             if data_list[i]>data_list[i+1]:
    14                 data_list[i],data_list[i+1]= data_list[i+1],data_list[i]
    15                 loop_count+=1
    16             print(data_list)
    17         print(data_list)
    18     print("循环次数",loop_count)
    19     return data_list
    20 
    21 if __name__ == '__main__':
    22     bubble([ 9,1,22,31,45,3,6,2,11 ])

    2.选择排序算法算是一种最简单的排序算法,其步骤如下:

    1. 找到数组中最小的那个元素
    2. 将这个最小的元素与第一个元素互换位置
    3. 在剩下的元素中找到一个最小的元素
    4. 将这个最小的元素与第二个元素互换位置
    5. 依次类推,直到最后
     1 def selection(data_list=None):
     2     """
     3     选择排序
     4     :param data_list:
     5     :return:
     6     """
     7     # 默认index为0的是最小的
     8     _min=0
     9     for j in range(len(data_list)):
    10         for i in range(j,len(data_list)):
    11             if data_list[i]<data_list[_min]:
    12                 _min = i
    13         data_list[j],data_list[_min] =data_list[_min],data_list[j]
    14     return data_list
    15 if __name__ == '__main__':
    16     print(selection([ 9,1,22,31,45,3,6,2,11 ]))

    3插入排序:

    插入排序,这种排序的原理也相对简单。我们从某个位置的元素开始,我们认为,这个元素左边的数组已经有序了,按照从小到大的顺序排列。我们需要做的是,将这个元素插入到左边有序数组的合适位置,使得加入这个元素后,这个数组依旧有序。具体步骤如下:

    1. 我们从第 2 个元素开始(其索引为 1,因为从零开始索引),对比第 2 个元素与第 1 个元素,如果第 2 个元素小于第 1 个元素,则交换两者的位置。
    2. 然后是第 3 个元素,把它和第二个元素对比,如果第三个元素比较小,则交换两者位置。这时第 3 个元素在 第二个元素的位置,然后对比它与第一个元素的位置,如果小,则交换。
    3. 然后对第4…,N个元素分别进行相同的操作。

    具体的流程,我们可以参考如下的动态演示图:

    这里写图片描述

    def insertion(data_list=None):
        """
        插入排序
        :param data_list:
        :return:
        """
        for j in range(len(data_list)):
            for i in range(j, 0, -1):
                if data_list[i] < data_list[i - 1]:
                    data_list[i], data_list[i - 1] = data_list[i - 1], data_list[i]
        return data_list
    
    
    if __name__ == '__main__':
        print(insertion([9, 1, 22, 31, 45, 3, 6, 2, 11]))

    4.快速排序:

    未完待续

  • 相关阅读:
    QT全局热键(用nativeKeycode封装API,不跨平台)
    Android 短信模块分析(二) MMS中四大组件核心功能详解
    一个高效过滤非UTF8字符的C函数(也可用来判断是否utf8)
    Windows-1252对Latin1编码有改变(并不完全兼容),而且Latin1缺失了好多西欧字符(法语,德语,西班牙语都有)
    C++静态库与动态库
    CFBundleName系列参数的含义
    QT完美转换特殊字符的大小写
    Java-继承的应用
    RTTI、虚函数和虚基类的实现方式、开销分析及使用指导(虚函数的开销很小,就2次操作而已)
    delphi如何获得当前操作系统语言环境
  • 原文地址:https://www.cnblogs.com/twotigers/p/8550694.html
Copyright © 2011-2022 走看看