• python 实现排序算法


    一、冒泡排序

    原理:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

    def bubble_sort(data):
      for i in range(len(data)-1):
        for j in range(len(data)- i -1):
          if data[j]<data[j + 1]:
            data[j], data[j + 1] = data[j + 1], data[j]

    二、插入排序

    原理:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序。

    def insert_sort(data):
      for i in range(1, len(data)):
        tmp = data[i]
        j = i - 1
        while j>=0 and data[j] > tmp:
          data[j],data[j + 1] = data[j + 1],data[j]
          j -= 1
        data[j + 1] = tmp

    三、选择排序

    原理:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

    def select_sort(data):
      for i in range(len(data)-1):
        min_num = i
        for j in range(i+1, len(data)):
          if data[j]<data[i]:
            min_num = j
          data[i], data[min_num] = data[min_num], data[i]

    四、快速排序

    原理:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    def quick_sort(data,left,right):
      if left<right:
        mid = partition(data,left,right):
        quick_sort(data,left,mid-1)
        quick_sort(data,mid+1,right)

    def partition(data,left,right):
      tmp = data[left]
      while left < right:
        while left < right and data[right]>=tmp:
          right -= 1
        data[left] = data[right]
        while left < right and data[left]<=tmp:
          left += 1
        data[right] = data [left]
      data[left] = tmp
      return left


    五、堆排序

    原理:堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。

    def sift(data,low,high):
      i = low
      j = 2*i + 1
      tmp = data[i]
      while j <= high: # 只要没到最后根最后
        if j < high and data[j] < data[j + 1]: # 是否有右孩子,且右孩子大于左孩子
          j = j + 1 # j 成为最大孩子的下标
        if tmp < data[j]: # 最大的孩子是否大于父亲
          data[i] = data[j] # 子孩子上位
          i = j # 重新赋值下标
          j = 2*i + 1
        else: # 上述条件都不满足,跳出循环
          break
      data[i] = tmp

    def heap_sort(data):
      n = len(data)
      for i in range(n // 2 -1 ,-1,-1):
        sift(data,i,n-1)
      for i in range(n-1,-1,-1):
        data[0],data[i] = data[i],data[0]
        sift(data,0,i-1)

  • 相关阅读:
    Python 命令模式和交互模式
    Python自带IDE设置字体
    Python2.7和3.7区别
    Kubernetes1.91(K8s)安装部署过程(八)-- kubernetes-dashboard安装
    Kubernetes1.91(K8s)安装部署过程(七)--coredns安装
    nginx 设置自签名证书以及设置网址http强制转https访问
    Kubernetes1.91(K8s)安装部署过程(六)--node节点部署
    VMware安装VMware tool是 遇到The path "" is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers.
    第三方git pull免密码更新
    Kubernetes1.91(K8s)安装部署过程(五)--安装flannel网络插件
  • 原文地址:https://www.cnblogs.com/niansi/p/8053181.html
Copyright © 2020-2023  润新知