python练习 ——两个升序列表的合并

本文介绍了如何使用Python编写一个名为`merge_list`的函数,该函数接收两个已排序的列表l1和l2以及它们各自的长度n1和n2,合并这两个列表并保持升序。通过示例[1,2]和[3,4],函数返回合并后的列表[1,2,3,4],同时计算并返回合并后列表的中位数3。

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

两个升序列表的合并

def merge_list(l1,l2,n1,n2):
    i = 0
    j = 0
    m_list = []
    while(1):
        if(l1[i]<=l2[j]):
            m_list.append(l1[i])
            i = i + 1
        else:
            m_list.append(l2[j])
            j = j + 1
        if(i == n1):
            m_list.extend(l2[j:n2])
            break
        else: 
            if(j == n2):
                m_list.extend(l1[i:n1])
                break
    print(m_list)
    return m_list[(n1+n2)//2]

测试:

merge_list([1,2],[3,4],2,2)

结果:

[1, 2, 3, 4]
3

### 关于洛谷平台上的排序算法练习题目及其Python实现 在洛谷平台上存在一系列针对排序算法设计的编程挑战,这些题目不仅有助于理解不同类型的排序方法,还能够提升解决实际问题的能力。以下是几个推荐给学习者的经典排序算法习题,并附带简单的Python实现思路。 #### 1. 快速排序 (Quick Sort) 快速排序是一种高效的分治法排序算法,在平均情况下具有O(n log n)的时间复杂度。对于这个问题,可以通过选择数组中的某个元素作为“基准”,然后将小于等于该基准值的所有元素移动至其左侧,大于它的则放置在其右侧来完成一次划分操作。之后递归地对左右两部分继续执行相同的操作直到整个序列有序[^1]。 ```python def quick_sort(arr): if len(arr) <= 1: return arr else: pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right) ``` #### 2. 插入排序 (Insertion Sort) 插入排序适用于较小规模的数据集或几乎已排序的情况。它通过构建有序序列的方式工作——每次从未处理的部分取出一个记录并将其插入到前面已经排好序的位置上。此过程不断重复直至所有数据都被处理完毕[^4]。 ```python def insertion_sort(arr): for i in range(1, len(arr)): key = arr[i] j = i - 1 while j >= 0 and key < arr[j]: arr[j + 1] = arr[j] j -= 1 arr[j + 1] = key return arr ``` #### 3. 堆排序 (Heap Sort) 堆排序利用二叉堆这种特殊形式的最大/最小堆性质来进行排序。首先建立最大(或最小)堆,接着依次交换根节点与最后一个叶子结点位置并将新的子树重新调整成合法的堆形态,如此循环往复最终得到完全升序排列的结果。 ```python import heapq def heap_sort(arr): h = [] for value in arr: heapq.heappush(h, value) return [heapq.heappop(h) for _ in range(len(h))] ``` #### 4. 归并排序 (Merge Sort) 归并排序也是一种基于分治策略的经典排序技术。它先将待排序列分成若干个小片段分别独立排序后再逐步合并相邻的小段形成更大的有序区间,直至全部合成为一个完整的有序表为止。 ```python def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left_half = merge_sort(arr[:mid]) right_half = merge_sort(arr[mid:]) merged_arr = [] l_idx, r_idx = 0, 0 while l_idx < len(left_half) and r_idx < len(right_half): if left_half[l_idx] < right_half[r_idx]: merged_arr.append(left_half[l_idx]) l_idx += 1 else: merged_arr.append(right_half[r_idx]) r_idx += 1 merged_arr.extend(left_half[l_idx:]) merged_arr.extend(right_half[r_idx:]) return merged_arr ``` 以上就是在洛谷网站上可以尝试的一些基本排序算法以及它们对应的简单Python代码示例。当然还有更多有趣的排序题目等待探索!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值