zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    【1801視聴説2宿題】中国のリサイクル事情やごみの分別事情に対する意見
    【1701日本語新聞編集】第2回3月6日
    【1701新聞編集宿題】興味のあるネットニュース
    【1801日語写作】第2回:3月5日
    【1801日語听解4】第2回:3月3日
    【1801日本語新聞選読】第2回:3月3日
    不解压查看tar.gz包内文件
    设计模式——适配器模式
    ubuntu安装jre
    设计模式——抽象工厂模式
  • 原文地址:https://www.cnblogs.com/monkiki/p/14032986.html
Copyright © 2011-2022 走看看