1.排序算法比较 利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且 (1)统计每一种排序上机所花费的时间。 (2)统计在完全正序,完全逆序情况下记录的比较次数和移动次数。 (3)比较的指标为关键字的比较次数和记录的移动次数(一次记录交换计为3次移动)。 (4)对结果作简单分析,包括对各组数据得出结果波动大小的解释。

时间: 2024-02-16 11:03:24 浏览: 22
本题需要编写程序进行排序算法比较,下面给出一个 Python 代码示例: ```python import random import time # 插入排序 def insertion_sort(arr): n = len(arr) for i in range(1, n): key = arr[i] j = i - 1 while j >= 0 and arr[j] > key: arr[j+1] = arr[j] j -= 1 arr[j+1] = key # 起泡排序 def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # 选择排序 def selection_sort(arr): n = len(arr) for i in range(n): min_idx = i for j in range(i+1, n): if arr[j] < arr[min_idx]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] # 快速排序 def quick_sort(arr): def partition(arr, low, high): pivot = arr[high] i = low - 1 for j in range(low, high): if arr[j] < pivot: i += 1 arr[i], arr[j] = arr[j], arr[i] arr[i+1], arr[high] = arr[high], arr[i+1] return i+1 def sort_helper(arr, low, high): if low < high: pivot_idx = partition(arr, low, high) sort_helper(arr, low, pivot_idx-1) sort_helper(arr, pivot_idx+1, high) sort_helper(arr, 0, len(arr)-1) # 堆排序 def heap_sort(arr): def heapify(arr, n, i): largest = i l = 2 * i + 1 r = 2 * i + 2 if l < n and arr[l] > arr[largest]: largest = l if r < n and arr[r] > arr[largest]: largest = r if largest != i: arr[i], arr[largest] = arr[largest], arr[i] heapify(arr, n, largest) n = len(arr) for i in range(n//2 - 1, -1, -1): heapify(arr, n, i) for i in range(n-1, 0, -1): arr[0], arr[i] = arr[i], arr[0] heapify(arr, i, 0) # 归并排序 def merge_sort(arr): def merge(arr, l, m, r): n1 = m - l + 1 n2 = r - m L = [0] * n1 R = [0] * n2 for i in range(n1): L[i] = arr[l+i] for i in range(n2): R[i] = arr[m+1+i] i = 0 j = 0 k = l while i < n1 and j < n2: if L[i] <= R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 while i < n1: arr[k] = L[i] i += 1 k += 1 while j < n2: arr[k] = R[j] j += 1 k += 1 def sort_helper(arr, l, r): if l < r: m = (l + r) // 2 sort_helper(arr, l, m) sort_helper(arr, m+1, r) merge(arr, l, m, r) sort_helper(arr, 0, len(arr)-1) # 生成随机数 arr = [random.randint(0, 100000) for i in range(30000)] # 插入排序 start_time = time.time() insertion_sort(arr.copy()) end_time = time.time() insertion_time = end_time - start_time # 起泡排序 start_time = time.time() bubble_sort(arr.copy()) end_time = time.time() bubble_time = end_time - start_time # 选择排序 start_time = time.time() selection_sort(arr.copy()) end_time = time.time() selection_time = end_time - start_time # 快速排序 start_time = time.time() quick_sort(arr.copy()) end_time = time.time() quick_time = end_time - start_time # 堆排序 start_time = time.time() heap_sort(arr.copy()) end_time = time.time() heap_time = end_time - start_time # 归并排序 start_time = time.time() merge_sort(arr.copy()) end_time = time.time() merge_time = end_time - start_time print("插入排序时间:", insertion_time) print("起泡排序时间:", bubble_time) print("选择排序时间:", selection_time) print("快速排序时间:", quick_time) print("堆排序时间:", heap_time) print("归并排序时间:", merge_time) ``` 这段代码生成了 30000 个随机整数,并分别使用了插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序进行排序,并统计了每一种排序算法所花费的时间。同时,如果需要统计完全正序或完全逆序情况下的比较次数和移动次数,可以在每个排序算法中添加相关的计数代码。波动大小的解释可以通过对比不同排序算法的时间复杂度和算法特点来给出。

相关推荐

最新推荐

recommend-type

C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等

本文实现了八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序 首先是算法实现文件Sort.h,代码如下: /* * 实现了八个常用的排序算法:插入排序、冒泡排序...
recommend-type

广州大学 数据结构实验报告 实验四 查找和排序算法实现

实验四 查找和排序算法...用随机函数生成16个2位正整数(10~99),实现插入排序、选择排序、冒泡排序、双向冒泡、快速排序、二路归并排序等多种排序算法,输出排序中间过程、统计关键字的比较次数和记录的移动次数。
recommend-type

c语言编程的几种排序算法比较

排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法 对算法本身的速度要求很高。 而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将 给出详细的说明。
recommend-type

数据结构课程设计报告之排序算法.docx

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。
recommend-type

快速排序的四种python实现(推荐)

主要介绍了python实现快速排序算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。