关闭

Python数据结构——查找和排序

标签: python查找排序
164人阅读 评论(0) 收藏 举报
分类:

1.1线性查找
在Python中查看一个元素是否在一个序列中,我们可以使用‘in’操作符,如:

if key in theArray :
print( "key在 array中." )
else :
print( "key 不在 array中." )

不难想象,其实‘in’操作符是基于线性查找实现的。接下来看一个在无序序列上的线性查找的实现。

def linearSearch( theValues, target ):
  n = len( theValues )
  for i in range( n ) :
      #如果欲查找的元素存在于列表中,返回Ture
      if theValues[i] == target
          return True
      return False    #如果没找到,返回False

接下来再看一个有序序列上的线性查找的实现

 def sortedLinearSearch( theValues, item ) :
   n = len( theValues )
   for i in range( n ) :
     # 如果欲查找的元素存在于列表中,返回Ture
     if theValues[i] == item :
       return True
 # 如果欲查找的元素大于当前元素, 则不在序列中.
     elif theValues[i] > item :
       return False

   return False # 元素不在序列中.

寻找最小值
假设要在一个无需列表中寻找最小值,这可以直接应用Python的内置方法’min()’.内部机制仍然是线性查找。接下来看一个在无需列表中寻找最小值得实现:

 def findSmallest( theValues ):
   n = len( theValues )
   # 假设序列中第一个元素时最小.
   smallest = theValues[0]
   # 查看序列中其他更小的元素.
   for i in range( 1, n ) :
       if theList[i] < smallest :
         smallest = theValues[i]

    return smallest # 返回最小值.

线性查找的时间复杂度为O(n)
1.2、二分查找
其应用的思想是分治策略,下面是一个在有序序列中应用二分查找的列子

 def binarySearch( theValues, target ) :
   low = 0
   high = len(theValues) - 1
   #重复使用二分法知道找到元素
   while low <= high :
     # 确定序列中间值.
    mid = (high + low) // 2
     # 中间值是目标元素么?
    if theValues[mid] == target :
      return True
    # 目标元素小于中间值?
    elif target < theValues[mid] :
      high = mid - 1
   # 目标元素在中间值后面?
    else :
      low = mid + 1

 # 如果序列不能再分,则结束.
   return False

二分查找的时间复杂度为O(logn),比线性查找更高效。

2、排序
冒泡排序
.

def bubbleSort( theSeq ):
  n = len( theSeq )
  # Perform n-1 bubble operations on the sequence
  for i in range( n - 1 ) :
  # Bubble the largest item to the end.
  for j in range( i + n - 1 ) :
    if theSeq[j] > theSeq[j + 1] : # swap the j and j+1 items.
      tmp = theSeq[j]
      theSeq[j] = theSeq[j + 1]
      theSeq[j + 1] = tmp

选择排序
.

def selectionSort( theSeq ):
  n = len( theSeq )
  for i in range( n - 1 ):
   # Assume the ith element is the smallest.
    smallNdx = i
   # Determine if any other element contains a smaller value.
    for j in range( i + 1, n ):
      if theSeq[j] < theSeq[smallNdx] :
        smallNdx = j

   # Swap the ith value and smallNdx value only if the smallest value is
  # not already in its proper position. Some implementations omit testing
  # the condition and always swap the two values.
   if smallNdx != i :
     tmp = theSeq[i]
     theSeq[i] = theSeq[smallNdx]
     theSeq[smallNdx] = tmp

插入排序

def insertionSort( theSeq ):
  n = len( theSeq )
  # Starts with the first item as the only sorted entry.
  for i in range( 1, n ) :
  # Save the value to be positioned.
    value = theSeq[i]
   # Find the position where value fits in the ordered part of the list.
    pos = i
    while pos > 0 and value < theSeq[pos - 1] :
   # Shift the items to the right during the search.
       theSeq[pos] = theSeq[pos - 1]
       pos -= 1

 # Put the saved value into the open slot.
   theSeq[pos] = value

3、有序列表

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

数据结构与算法--查找与排序(一)

Top 线性查找二分查找冒泡排序插入排序选择排序快速排序归并排序 1 线性查找 1.1 问题 线性查找,又称为顺序查找,是指在所有给定的值中从一端开始逐个检查每个元素是否为要查...
  • opera95
  • opera95
  • 2016-04-22 08:30
  • 2749

数据结构实验:查找和排序

查找和排序 实验目的   1. 掌握顺序查找,二分法查找,分块查找的算法。   2.掌握各种排序算法及其性能的比较 二、实验内容 1.编写一个程序输出在顺序表{13,22,35,43,54,...
  • u012278856
  • u012278856
  • 2014-06-03 22:12
  • 648

排序二叉树、查找、二分法查找、数据结构,实验报告

#include #include #include #include #include using namespace std; typedef int ElemType ; typed...
  • u011042188
  • u011042188
  • 2013-12-11 22:45
  • 1359

数据结构(Java)——查找和排序(1)

查找是这样一个过程,即在某个项目组中寻找某一指定目标元素,或者确定该组中并不存在该目标元素。 对其进行查找的项目的组有时也成为查找池。 两种常见的查找方式:线性查找和二分查找。 为了能够查找某...
  • zhangyifei521
  • zhangyifei521
  • 2015-11-19 09:58
  • 576

数据结构中排序和查找各种时间复杂度

(1)冒泡排序         冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排...
  • wangwenwen
  • wangwenwen
  • 2013-09-28 23:26
  • 5717

《常见算法和数据结构》元素排序(1)——简单排序(附动画)

元素排序(1)——简单排序 本系列文章主要介绍常用的算法和数据结构的知识,记录的是《Algorithms I/II》课程的内容,采用的是“算法(第4版)”这本红宝书作为学习教材,通过这系列文章,可...
  • hk2291976
  • hk2291976
  • 2016-04-06 21:58
  • 821

python数据结构——排序算法——八大排序算法的Python实现

1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算...
  • u010454729
  • u010454729
  • 2015-10-27 21:25
  • 597

数据结构——排序查找算法实现

前面转载了一篇讲排序算法的文章,这几天将排序和查找算法进行了实现,在这里贴出代码来。
  • u010757264
  • u010757264
  • 2016-08-18 16:13
  • 431

数据结构基础 查找 之 二分查找

二分查找又称折半查找,对排好序的数组,每次取这个数和数组中间的数进行比较,复杂度是O(logn)。本文在阐述二分查找算法思想的基础上给出递归、非递归以及STL三种方式的源码实现,现详述如下。
  • u013630349
  • u013630349
  • 2015-07-28 10:51
  • 1887

数据结构-排序算法原理和Python实现

排序算法概览 插入排序 直接插入排序 希尔排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 归并排序 基数排序 有些时候看懂了,不一定会写,不妨自己写一遍代码看看会有什么收获。排序算...
  • shine19930820
  • shine19930820
  • 2017-04-09 22:30
  • 551
    个人资料
    • 访问:8521次
    • 积分:351
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:5篇
    • 译文:14篇
    • 评论:3条