几种排序算法

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. 冒泡排序

 

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

几种排序算法分析

几种排序算法分析

几种排序算法分析

关于选择排序并去重的几种算法分析

几种常见的排序算法分析学习

java开发过程中几种常用算法