排序算法

Posted Twotigers

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法相关的知识,希望对你有一定的参考价值。

参考博客: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.快速排序:

未完待续

以上是关于排序算法的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

快速排序-递归实现

从搜索文档中查找最小片段的算法?

在第6731次释放指针后双重免费或损坏

TimSort算法分析

以下代码片段的算法复杂度