
1) 【一句话结论】:在雷达目标跟踪中,按距离/时间戳排序时,推荐快速排序(时间复杂度O(n log n)、空间O(log n),适合一般场景)或归并排序(时间复杂度O(n log n)、空间O(n)、稳定,适合稳定性要求高的场景);需根据场景(如稳定性需求、数据量、空间限制)选择。
2) 【原理/概念讲解】:排序算法的核心是将数据按规则(如升序)排列。时间复杂度反映算法执行时间随数据规模n的增长趋势,空间复杂度反映额外空间需求。雷达目标跟踪中,目标排序用于后续处理(如筛选近目标),数据量可能较大(如每帧目标数十至数百),需平衡效率与稳定性。
3) 【对比与适用场景】
| 算法 | 定义 | 时间复杂度 | 空间复杂度 | 稳定性 | 适用场景 | 注意点 |
|---|---|---|---|---|---|---|
| 快速排序 | 选基准分区,递归排序左右子数组 | 平均O(n log n),最坏O(n²) | O(log n)(递归栈) | 不稳定 | 一般排序需求,数据量较大(如雷达每帧目标数百),对稳定性无严格要求(如目标ID不影响顺序) | 需优化最坏情况(随机基准/三数取中) |
| 归并排序 | 分半排序后合并 | O(n log n) | O(n)(临时数组) | 稳定 | 稳定性要求高(如时间戳排序需保持原始顺序),数据量较大且空间充足场景(如雷达时间戳排序) | 空间占用高,适合内存充足场景 |
4) 【示例】(按距离升序排序,目标结构体含距离dist和ID id):
快速排序伪代码:
def quick_sort(arr, left, right):
if left < right:
pivot_idx = partition(arr, left, right)
quick_sort(arr, left, pivot_idx - 1)
quick_sort(arr, pivot_idx + 1, right)
def partition(arr, left, right):
pivot = arr[right].dist
i = left - 1
for j in range(left, right):
if arr[j].dist <= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[right] = arr[right], arr[i + 1]
return i + 1
归并排序伪代码:
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
result = []
i = j = 0
while i < len(left) and j < len(right):
if left[i].dist <= right[j].dist:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result.extend(left[i:])
result.extend(right[j:])
return result
5) 【面试口播版答案】:好的,面试官。在雷达目标跟踪中,排序算法用于按距离或时间戳对目标排序(如筛选近目标)。针对这类需求,我推荐快速排序或归并排序。快速排序平均时间复杂度O(n log n)、空间O(log n),适合一般场景(如雷达每帧目标数百);归并排序时间O(n log n)、空间O(n)且稳定,适合稳定性要求高的场景(如时间戳排序需保持原始顺序)。综合来看,若雷达跟踪对稳定性无严格要求,快速排序更高效;若有稳定性需求或数据量较大,归并排序更合适。
6) 【追问清单】
7) 【常见坑/雷区】