数据结构与算法------------顺序查找和无序查找python实现

本文对比了顺序查找和有序表查找两种算法的Python实现,通过实例展示了在无序和有序列表中搜索特定元素的过程。重点介绍了如何提高查找效率,适用于初学者理解查找算法基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 顺序查找:无序表查找代码
def sequentialSearch(alist,item):
    pos = 0
    found = False
    while pos < len(alist) and not found:
        if alist[pos] == item:
            found = True
        else:
            pos += 1
    return found
testlist = [1,2,34,56,54,34,22,56,78]
print(sequentialSearch(testlist,33))
print(sequentialSearch(testlist,34))

# 有序表查找代码
def orderrdSequentialSearch(alists,items):
    pos = 0
    found = False
    stop = False
    while pos < len(alists) and not found and not stop:
        if alists[pos] == items:
            found = True
        else:
            if alists[pos] > items:
                stop = True
            else:
                pos += 1
    return found
testlists = [1,2,3,4,5,6,7,8,9,10]
print(orderrdSequentialSearch(testlists,4))
print(orderrdSequentialSearch(testlists,45))

### 数据结构算法中的查找排序 #### 查找算法概述 查找是指在一个数据集合中寻找特定元素的过程。常见的查找算法包括顺序查找、二分查找(也称为折半查找)、哈希查找等。对于不同的应用场景,选择合适的查找方式至关重要。 - **顺序查找**适用于无序列表,在最坏情况下需要遍历整个列表才能找到目标项。 - **二分查找**则针对有序数组实现高效的搜索操作,通过不断缩小范围来定位目标位置[^2]。 ```python def binary_search(arr, target): low, high = 0, len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 ``` #### 排序算法分类及其特点 排序是对一组对象按照某种规则重新排列的过程。根据是否依赖于比较运算符可分为两大类: - **基于比较的排序**:如冒泡排序、插入排序、希尔排序、快速排序以及堆排序等;这类方法的时间复杂度通常不低于 O(n log n),其中 n 表示待处理的数据量。 - **非基于比较的排序**:例如计数排序、基数排序桶排序,这些技术利用了数值本身的特性来进行排序,可以在某些特殊条件下达到线性时间性能O(n)。 ##### 堆排序简介 堆是一种特殊的完全二叉树结构,可以分为最大堆最小堆两种形式。在构建好初始的最大(小)堆之后,可以通过反复取出根节点并重建堆的方式完成升序或降序排列的任务。具体来说,堆排序主要涉及两个核心步骤:建堆过程调整过程[^3]。 ```c++ void heapify(int arr[], int n, int i){ int largest = i; int l = 2*i + 1; int r = 2*i + 2; if(l<n && arr[l]>arr[largest]) largest=l; if(r<n && arr[r]>arr[largest]) largest=r; if(largest!=i){ swap(&arr[i],&arr[largest]); heapify(arr,n,largest); } } void heapsort(int arr[],int n){ for(int i=n/2-1;i>=0;i--) heapify(arr,n,i); for(int i=n-1;i>0;i--){ swap(&arr[0],&arr[i]); heapify(arr,i,0); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值