• Python数据结构与算法—排序和查找


    排序和查找

    排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。

    常见排序方法:

    • 冒泡排序

    冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

    1 # 冒泡
    2 def bubble(list_):
    3   # 外层循环表达比较多少轮
    4   for i in range(len(list_) - 1):
    5     #内层循环把控比较次数
    6     for j in range(len(list_) - 1 - i):
    7       if list_[j] > list_[j + 1]:
    8         list_[j],list_[j + 1] = 
    9           list_[j + 1],list_[j]
    冒泡排序
    • 选择排序

    工作原理为,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

     1 # 选择
     2 def select(list_):
     3   # 外层循环控制比较多少轮
     4   for i in range(len(list_) - 1):
     5     min = i # 假定list_[i] 为最小值
     6     for j in range(i+1,len(list_)):
     7       if list_[min] > list_[j]:
     8         min = j
     9     # 如果i不是最小值则交换
    10     if min != i:
    11       list_[i],list_[min] = 
    12         list_[min],list_[i]
    选择排序
    • 插入排序

    对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

     1 # 插入
     2 def insert(list_):
     3   # 控制每次x选取的待插入数值
     4   for i in range(1,len(list_)):
     5     x = list_[i]  # 选取待处理的数
     6     j = i - 1
     7     while j >=0 and list_[j] > x:
     8       list_[j + 1] = list_[j]
     9       j -= 1
    10     list_[j + 1] = x
    插入排序
    • 快速排序

    步骤:

    从数列中挑出一个元素,称为 "基准"(pivot),
    重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
    递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

     1 # 完成一轮排序过程
     2 def sub_sort(list_,low,high):
     3   # 基准数
     4   x = list_[low]
     5   while low < high:
     6     # 后面的数小于x放到前面的空位
     7     while list_[high] >= x and high > low:
     8       high -= 1
     9     list_[low] = list_[high] # 将数往前甩
    10     while list_[low] < x and low < high:
    11       low += 1
    12     list_[high] = list_[low]
    13   list_[low] = x # 将基准数插入
    14   return low
    15 
    16 
    17 # 快排 low 第一个数序列号 high 最后一个数序列号
    18 def quick(list_,low,high):
    19   if low < high:
    20     key = sub_sort(list_,low,high)
    21     quick(list_,low,key - 1)
    22     quick(list_, key+1, high)
    快速排序

    查找(或检索)是在给定信息集上寻找特定信息元素的过程。

    二分法查找

    当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。

     1 # 对有序数列进行二分查找
     2 def search(list_,key):
     3   low,high = 0,len(list_) - 1
     4   while low <= high:
     5     mid = (low + high) // 2
     6     if list_[mid] < key:
     7       low = mid + 1
     8     elif list_[mid] > key:
     9       high = mid - 1
    10     else:
    11       return mid
    12 
    13 l = [1,2,3,4,5,6,7,8,9,10]
    14 print("Key index is:",search(l,12))
    二分查找代码
  • 相关阅读:
    Spark 之 内存模型
    Python 之 windows上安装和pycharm 使用
    Kafka之 kafka消费->SparkStreaming|写入->Kafka|kafka消费->hbase
    SparkStreaming之 任务失败后,自动重启
    微信小程序常用赋值方法小结
    eclipse中xml文件Ctrl+左键不跳转解决办法
    SpringCloud简介以及相关组件
    spring怎么设置定时任务
    Http协议请求的不同类型
    Spring各个jar包作用
  • 原文地址:https://www.cnblogs.com/maplethefox/p/10988716.html
Copyright © 2020-2023  润新知