参考博客:http://blog.csdn.net/wangs0622/article/details/78690519
http://www.cnblogs.com/alex3714/articles/5474411.html
算法:
1.冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名
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 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插入排序:
插入排序,这种排序的原理也相对简单。我们从某个位置的元素开始,我们认为,这个元素左边的数组已经有序了,按照从小到大的顺序排列。我们需要做的是,将这个元素插入到左边有序数组的合适位置,使得加入这个元素后,这个数组依旧有序。具体步骤如下:
- 我们从第 2 个元素开始(其索引为 1,因为从零开始索引),对比第 2 个元素与第 1 个元素,如果第 2 个元素小于第 1 个元素,则交换两者的位置。
- 然后是第 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.快速排序:
未完待续