Mergesort-and-Quicksort/AI/code.md
2024-11-18 15:42:58 +08:00

3.5 KiB
Raw Blame History

以下是实验报告完成的详细指导和代码示例。


实验报告

一、归并排序和快速排序的基本思想

  1. 归并排序

    • 基本思想:归并排序基于分治思想。将数组递归地分成两个子数组,对每个子数组进行排序后再将其合并。合并时通过比较大小有序地将元素放入结果数组中。
    • 优点:稳定排序,时间复杂度为 (O(n \log n))。
    • 适用场景:数据量大且需要稳定排序。
  2. 快速排序

    • 基本思想:快速排序通过选择一个基准元素(通常是数组的第一个或最后一个元素),将数组划分为比基准小和比基准大的两个子数组,然后递归地对这两个子数组进行排序。
    • 优点:平均时间复杂度为 (O(n \log n)),空间复杂度低于归并排序。
    • 适用场景:数据量大且对稳定性要求不高。

二、实验环境

  1. 操作系统Windows/Linux。
  2. 开发工具Python 3.xJupyter Notebook。

三、源码实现

1. 归并排序

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):
    result = []
    i = j = 0
    
    # 合并两个子数组
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    # 加入剩余的元素
    result.extend(left[i:])
    result.extend(right[j:])
    return result

2. 快速排序

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    
    # 选择基准
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    # 递归排序
    return quick_sort(left) + middle + quick_sort(right)

四、算法分析

1. 归并排序

  • 时间复杂度:分割数组和合并操作均为 (O(n \log n))。
    • 最好、最坏和平均时间复杂度:(O(n \log n))。
  • 空间复杂度:需要额外存储中间数组,空间复杂度为 (O(n))。

2. 快速排序

  • 时间复杂度
    • 最好和平均时间复杂度:(O(n \log n))。
    • 最坏时间复杂度:当每次分割极不均匀时为 (O(n^2))。
  • 空间复杂度:原地排序,平均空间复杂度为 (O(\log n))。

五、实验运行结果

测试代码

if __name__ == "__main__":
    import random
    
    # 测试数组
    test_array = [random.randint(0, 100) for _ in range(10)]
    print("原始数组:", test_array)
    
    # 测试归并排序
    sorted_array_merge = merge_sort(test_array)
    print("归并排序结果:", sorted_array_merge)
    
    # 测试快速排序
    sorted_array_quick = quick_sort(test_array)
    print("快速排序结果:", sorted_array_quick)

运行结果截图

运行以上代码后,实验结果显示为随机数组的排序前后对比,例如:

原始数组: [35, 20, 7, 85, 50, 13, 99, 42, 15, 68]
归并排序结果: [7, 13, 15, 20, 35, 42, 50, 68, 85, 99]
快速排序结果: [7, 13, 15, 20, 35, 42, 50, 68, 85, 99]

截图保存实验运行结果以提交报告。


希望这份指导能够帮助您完成实验报告!需要进一步协助时,请随时提问。