牛客网笔试题归并排序
时间: 2024-12-26 16:12:45 浏览: 62
### 关于归并排序的笔试题目
在牛客网中,涉及归并排序的笔试题通常会考察其特性以及具体的应用场景。例如,在给定的一组排序算法中识别哪些算法的时间复杂度不受输入数据初始顺序的影响是一个常见的考点。
对于选项A插入排序、B堆排序、C冒泡排序、D归并排序和E选择排序而言,只有堆排序与归并排序的时间复杂度不依赖于输入序列的状态[^1]。这是因为归并排序总是将待排序列分割成尽可能相等的部分再逐步合并,从而保证了每次操作都能达到O(n log n)的时间效率。
下面给出一段简单的Python代码来展示如何实现归并排序:
```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:])
return merge(left_half, right_half)
def merge(left, right):
sorted_list = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
sorted_list.append(left[i])
i += 1
else:
sorted_list.append(right[j])
j += 1
sorted_list.extend(left[i:])
sorted_list.extend(right[j:])
return sorted_list
```
此段代码实现了经典的自顶向下的归并排序逻辑,它首先递归地把列表分成两半直到不能再分为止,之后再依次比较来自左右两侧最小元素并将较小者加入新的有序列表之中直至全部处理完毕。
阅读全文
相关推荐


















