leetcode常规算法题复盘(基础篇)——十大排序算法(一)

因为上一期挖了大坑,菜鸡博主说到做到,用python复现了一遍《十大排序算法》作为基础篇庆祝博客的回归。废话少说,上代码。

一、冒泡排序

双层循环判别语句,最后交换值

 1   ##############################
 2  #         1、冒泡排序         #
 3 #############################
 4 def BubbleSort(array):
 5     for i in range(len(array)-1):
 6         for j in range(len(array)-i-1):
 7             if array[j]>array[j+1]:
 8                 temp = array[j+1]
 9                 array[j+1] = array[j]
10                 array[j] = temp
11     return array

二、选择排序

双层循环记录最小(大)值索引,最后交换值

 1   ##############################
 2  #         2、选择排序         #
 3 #############################
 4 def SelectionSort(array):
 5     for i in range(len(array)):
 6         min_index = i
 7         for j in range(i,len(array)):
 8             if array[j]<array[min_index]:
 9                 min_index = j
10         temp = array[i]
11         array[i] = array[min_index]
12         array[min_index] = temp
13     return array

 三、插入排序

注意数值向后传递。

 1   ##############################
 2  #         3、插入排序         #
 3 #############################
 4 def InsertionSort(array):
 5     for i in range(1,len(array)):
 6         cur = array[i]
 7         pre = i-1
 8         while(pre>=0 and cur<array[pre]):
 9             array[pre+1] = array[pre]
10             pre += -1
11         array[pre+1] = cur
12     return array

 四、希尔排序(1/2方法)

用于处理大型数据的插入排序升级版,注意1变为gap,同向后传递值。

 1   ##############################
 2  #    4、希尔排序(1/2方法)      #
 3 #############################
 4 def ShellSort(array):
 5     lenth = len(array)
 6     gap = lenth//2
 7     while(gap):
 8         print(gap)
 9         for i in range(gap,lenth):
10             cur = array[i]
11             pre = i-gap
12             while(pre>=gap-1 and cur<array[pre]):
13                 array[pre+gap] = array[pre]
14                 pre = pre-gap
15             array[pre+gap] = cur
16         gap = gap//2
17     return array

 

五、归并排序

分治、递归思想

 1   ##############################
 2  #        5、归并排序          #
 3 #############################
 4 def MergeSort(array):
 5     lenth = len(array)
 6     if lenth<2:
 7         return array
 8     middle = lenth//2
 9     left = array[0:middle]
10     right = array[middle:]
11     return merge(MergeSort(left),MergeSort(right))
12 
13 def merge(left,right):
14     result = []
15     while(len(left)>0 and len(right)>0):
16         if left[0] <= right[0]:
17             result.append(left.pop(0))
18         else:
19             result.append(right.pop(0))
20     while(len(left)):
21         result.append(left.pop(0))
22     while(len(right)):
23         result.append(right.pop(0))
24     return result

 

posted @ 2020-11-24 21:58  苏荷琴玖  阅读(237)  评论(0编辑  收藏  举报