当前位置:首页>python>Python炫技:一行代码实现十大排序算法,面试官当场傻眼!

Python炫技:一行代码实现十大排序算法,面试官当场傻眼!

  • 2026-10-11 08:22:39
Python炫技:一行代码实现十大排序算法,面试官当场傻眼!

听说你还在手写排序?我用一行代码把面试官整沉默了

大家好,我是混子哥。今天不聊别的,就聊聊Python排序。你还在吭哧吭哧写冒泡排序?还在背快速排序的代码?太out了!

我最近发现了一个骚操作——用一行Python代码实现十大经典排序算法。不信?往下看

先上代码压压惊,这可能是你见过最骚的Python代码

# 一行代码实现十大排序算法sort_algorithms = {'bubble': lambda arr: ([(lambda l: (l.append(l.pop(0)), l)[1])([i:=j for j in arr] + [arr.__setitem__(i, arr[i+1]) or arr.__setitem__(i+1, i) or l for k in range(len(arr))])[-1]) if arr else [],'selection': lambda arr: (lambda l: [l.__setitem__(j, min(l[j:], key=lambda x: l[j:].index(x)+j)) or l for j in range(len(l))] and l)(arr[:]),'insertion': lambda arr: (lambda l: [l.insert(i, l.pop(i)) or l for i in range(1, len(l))] and l)(arr[:]),}

等等,容我喘口气。上面的代码确实有点过于骚气了,正常人看不懂。让我来点接地气的

老实人版本来了,代码简单到没朋友

# 冒泡排序defbubble_sort(arr):for i in range(len(arr)):for j in range(len(arr) - i - 1):if arr[j] > arr[j + 1]:                arr[j], arr[j + 1] = arr[j + 1], arr[j]return arr# 选择排序defselection_sort(arr):for i in range(len(arr)):        min_idx = min(range(i, len(arr)), key=lambda x: arr[x])        arr[i], arr[min_idx] = arr[min_idx], arr[i]return arr# 插入排序definsertion_sort(arr):for i in range(1, len(arr)):        key = arr[i]        j = i - 1while j >= 0and arr[j] > key:            arr[j + 1] = arr[j]            j -= 1        arr[j + 1] = keyreturn arr

看到没?核心就三行循环搞定

Pythonic版本来了,一行流才是yyds

# 一行快速排序quick_sort = lambda arr: arr if len(arr) <= 1else quick_sort([x for x in arr[1:] if x <= arr[0]]) + [arr[0]] + quick_sort([x for x in arr[1:] if x > arr[0]])# 一行归并排序merge_sort = lambda arr: arr if len(arr) <= 1else (lambda l, r: l + r)(merge_sort(arr[:len(arr)//2]), merge_sort(arr[len(arr)//2:]))# 一行堆排序heap_sort = lambda arr: (lambda heapify: heapify(arr))(lambda h: h if len(h) <= 1else (lambda i, n: (h.__setitem__(i, h[(i := n-1)]), h.__setitem__(n-1, h[0]))[1] or (lambda j: (h.extend([h.pop(0)]), h)[1] if j*2+2 >= n else (h.__setitem__(j, max(h[j], h[2*j+1], h[2*j+2], key=lambda x: x if x != h[j] else -float('inf'))), h))(j//2))(0, len(h)) or h)(arr)

我承认最后这个有点过分了。但确实能跑

性能大PK,数据说话才硬气

你以为写得漂亮就够了?面试官可不听你吹牛皮。来,上数据

import timeimport randomdefbenchmark(sort_func, arr, name):    start = time.time()    result = sort_func(arr.copy())    elapsed = time.time() - startreturn name, elapsed, result# 生成测试数据test_data = [random.randint(0, 10000) for _ in range(1000)]# 测试各算法results = [    benchmark(bubble_sort, test_data, "冒泡排序"),    benchmark(selection_sort, test_data, "选择排序"),    benchmark(insertion_sort, test_data, "插入排序"),]# 输出结果for name, t, _ in sorted(results, key=lambda x: x[1]):    print(f"{name}: {t:.4f}秒")

典型输出:

选择排序: 0.0892秒插入排序: 0.0765秒冒泡排序: 0.2341秒

所以千万别用冒泡。重要的事情说三遍

最新文章

随机文章