返回

算法题杂谈:冒泡排序 VS 两数之和的实现大比拼!

前端

引言

算法世界中,算法题犹如试金石,检验着程序员的编程功底。而冒泡排序和两数之和这两大算法题,更像是算法入门者的必修课。本文将以独到的视角,带领各位深入探讨它们的实现方式,挖掘其背后的奥秘。

冒泡排序:简洁高效的排序利器

冒泡排序,顾名思义,就是像冒泡一样不断上升,将最大的元素逐个浮出水面。它的实现思路十分简洁,每一轮遍历都会比较相邻元素,如果顺序不对就交换位置,直到所有元素有序为止。

核心步骤:

  1. 设定两个指针,ij,分别表示当前待排序元素和比较元素。
  2. j从头遍历到i-1,比较相邻元素arr[j]arr[j+1]
  3. 如果arr[j] > arr[j+1],则交换两者的位置。
  4. 重复步骤2和3,直至j遍历完i-1。
  5. i递减,从n-1开始,重复步骤1-4。

代码实现:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n-1, 0, -1):
        for j in range(0, i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

两数之和:查找和的强力搭档

两数之和问题要求找到一个无序数组中,和为目标值的两个元素。它有多种解法,每一种都各有千秋。

经典实现方式:

暴力穷举

def two_sum_brute(arr, target):
    for i in range(len(arr)):
        for j in range(i+1, len(arr)):
            if arr[i] + arr[j] == target:
                return [i, j]

哈希表查找

def two_sum_hash(arr, target):
    hashtable = {}
    for i in range(len(arr)):
        complement = target - arr[i]
        if complement in hashtable:
            return [i, hashtable[complement]]
        else:
            hashtable[arr[i]] = i

排序加双指针

def two_sum_sort(arr, target):
    arr.sort()
    i, j = 0, len(arr)-1
    while i < j:
        sum = arr[i] + arr[j]
        if sum == target:
            return [i, j]
        elif sum < target:
            i += 1
        else:
            j -= 1

总结与展望

冒泡排序和两数之和是算法中的基础问题,它们的实现方式多种多样,各有优缺点。掌握它们的原理和代码实现,对于初学者理解算法思维和提升编程能力大有裨益。