码迷,mamicode.com
首页 > 编程语言 > 详细

几种排序算法

时间:2019-04-26 12:43:45      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:class   sele   一个   img   mamicode   ret   记录   image   alt   

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

 

几种排序算法

标签:class   sele   一个   img   mamicode   ret   记录   image   alt   

原文地址:https://www.cnblogs.com/king-lps/p/10773578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!