如何快速实现从指定数值出发、方向随机的波浪式数组排序
波浪格式定向随机排序实现方案
核心实现逻辑
- 第一步:先定位并提取指定的起始值,对剩余元素做升序排序,用双指针分别指向剩余元素的最小值和最大值位置
- 第二步:随机生成初始波浪方向,可选*比起始值大(上升沿起始)或比起始值小(下降沿起始)*两种模式
- 第三步:根据初始方向交替取剩余元素的最大值、最小值(或最小值、最大值)追加到结果数组,每次追加后移动对应指针,直到所有元素拼接完成
整体时间复杂度为O(n log n),主要耗时在剩余元素的排序步骤,是目前效率较高的实现方案。
代码实现(Python版)
import random def wave_sort_with_start(arr, start_val): # 提取起始点,剩余元素升序排序 res = [start_val] rest = sorted([x for x in arr if x != start_val]) left, right = 0, len(rest) - 1 # 随机确定初始方向:True为第一个元素比起始点大,False为更小 next_larger = random.choice([True, False]) while left <= right: if next_larger: res.append(rest[right]) right -= 1 else: res.append(rest[left]) left += 1 # 切换下一次的波浪方向 next_larger = not next_larger return res # 示例测试 test_arr = [10,6,0,8,4,2] start = 4 print(wave_sort_with_start(test_arr, start))
效果验证
对示例输入多次运行代码,可随机输出两种符合要求的结果:
- 上升沿起始输出:
[4,6,2,8,0,10] - 下降沿起始输出:
[4,2,6,0,8,10]
内容的提问来源于stack exchange,提问作者Mr. Smit
相关产品推荐
相关产品推荐

