几种排序算法
Posted king-lps
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几种排序算法相关的知识,希望对你有一定的参考价值。
1. 选择排序
思路:每次选择当前元素后面最小的一个数和当前元素替换。
1 def selectsort(arr):
2 if len(arr)<=1:return arr
3 for i in range(len(arr)):
4 index = i
5 for j in range(i+1,len(arr)):
6 if arr[j]<arr[index]:
7 index=j
8 arr[i],arr[index] = arr[index],arr[i]
9
10 return arr
2. 插入排序
思路:每次对当前的元素插入到前面的合适位置。下图2要插入到6之前。
两种操作:先记录temp=2,然后8右移,6右移,再将temp放入。或者2与8交换,2与6交换,结束。
操作1:挪动
1 def selectsort(arr):
2 if len(arr)<=1:return arr
3 for i in range(1,len(arr)): # [0,i) have been sorted 注意初始值,考虑到[0,1)左闭右开是有序的,所以从1开始
4 index = i-1
5 temp = arr[i]
6 while (index>=0) and (arr[index]>temp):
7 arr[index+1] = arr[index] # 这里是挨个往后挪,也可以用交换的形式
8 index-=1
9 arr[index+1] = temp
10
11 return arr
操作2:交换
1 def selectsort(arr):
2 if len(arr)<=1:return arr
3 for i in range(1,len(arr)): # [0,i) have been sorted
4 index = i-1
5 temp = arr[i]
6 while (index>=0) and (arr[index]>temp):
7 arr[index+1],arr[index] = arr[index],arr[index+1]
8 index-=1
9
10 return arr
总结:操作2每次交换都伴随3次赋值,所以操作1更快一些。插入排序对于近乎有序的数组非常快!因为在内层循环中,找到合理位置就立即结束,基本上内层执行几步就结束。虽然插入排序也是O(n^2),在近乎有序数组排序甚至可以达到O(n)的效率。
3. 冒泡排序
以上是关于几种排序算法的主要内容,如果未能解决你的问题,请参考以下文章