当前位置: 首页 > news >正文

算法设计学习9

实验目的及要求:
通过排序算法的实验,旨在深化学生对不同排序算法原理和性能的理解,培养其分析和比较算法效率的能力。通过实际编程,学生将掌握排序算法的实现方法,了解不同算法的优劣,并通过性能测试验证其在实际应用中的表现。通过这次实验,学生将深入了解排序算法的原理和性能特征,培养实际问题解决的编程能力,并提高对算法分析的理解水平。

实验设备环境:
1.微型计算机
2.DEV C++(或其他编译软件)

任务:
(1)用随机数产生 100 000 个待排序元素的关键字值
(2) 测试下列各排序函数的机器实际执行时间:
a) 直接插入排序;
b) 希尔排序;
c) 直接选择排序.
d)堆排序;
g)二路归并排序;
e)冒泡排序;
f) 快速排序;
h) 基于链式队列的基数排序。
完成 e,f 选项。
[算法思想] 程序生成了一个包含 10 个随机数的数组,然后分别对这个数组使用冒泡排序和快速排序,并测量了它们的执行时间。你可以在此基础上继续添加其他排序算法的实现和测试。请注意,排序算法的性能可能受到随机数生成的影响,因此可以多次运行程序以获得更稳定的结果。为了更好地衡量执行时间,使用了 C 标准库中的 time.h 头文件中的 clock 函数。
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int* generateRandomNumbers(int n) {
	int* arr = (int*)malloc(n * sizeof(int));
	for (int i = 0; i < n; ++i) {
		arr[i] = rand();
	}
	return arr;
}
void bubbleSort(int arr[], int n) {
	for (int i = 0; i < n - 1; ++i) {
		for (int j = 0; j < n - i - 1; ++j) {
			if (arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
void quickSort(int arr[], int low, int high) {
	if (low < high) {
		int pivot = arr[high];
		int i = low - 1;
		for (int j = low; j <= high - 1; ++j) {
			if (arr[j] <= pivot) {
				++i;
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		int temp = arr[i + 1];
		arr[i + 1] = arr[high];
		arr[high] = temp;
		quickSort(arr, low, i);
		quickSort(arr, i + 2, high);
	}
}
int main() {
	const int n = 8;
	int* arr_bubble = generateRandomNumbers(n);
	int* arr_quick = (int*)malloc(n * sizeof(int));
	printf("随机生成的值:\n");
	for (int i = 0; i < n; ++i) {
		printf("%d ", arr_bubble[i]);
	}
	printf("\n\n");
	for (int i = 0; i < n; ++i) {
		arr_quick[i] = arr_bubble[i];
	}
	clock_t start_bubble = clock();
	bubbleSort(arr_bubble, n);
	clock_t end_bubble = clock();
	double time_bubble = ((double)(end_bubble - start_bubble)) / CLOCKS_PER_SEC;
	clock_t start_quick = clock();
	quickSort(arr_quick, 0, n - 1);
	clock_t end_quick = clock();
	double time_quick = ((double)(end_quick - start_quick)) / CLOCKS_PER_SEC;
	printf("\n 冒泡排序执行时间: %f 秒\n", time_bubble);
	printf("快速排序执行时间: %f 秒\n", time_quick);
	free(arr_bubble);
	free(arr_quick);
	return 0;
}

http://www.dtcms.com/a/111584.html

相关文章:

  • 【Groovy快速上手 ONLY ONE】Groovy与Java的核心差异
  • 常见的ETL工具分类整理
  • 嵌入式——Linux系统的使用以及编程练习
  • stm32+LTR-390UV使用教程含源码
  • 【算法竞赛】dfs+csp综合应用(蓝桥2023A9像素放置)
  • 深入理解时间复杂度与空间复杂度
  • DeepSeek能否用于对话系统(Chatbot)?技术解析与应用实例!
  • 《AI大模型应知应会100篇》第3篇:大模型的能力边界:它能做什么,不能做什么
  • 3.29-3 压力测试(不同用户)
  • 搭建工作流自动化工具n8n并配置deepseek大模型
  • day23学习Pandas库
  • python基础-10-组织文件
  • 6. RabbitMQ 死信队列的详细操作编写
  • linux3 mkdir rmdir rm cp touch ls -d /*/
  • The emulator process for AVD xxx has terminated
  • 部署nerdctl工具
  • A2DP(Advanced Audio Distribution Profile)是蓝牙协议栈中用于音频传输的一个标准化协议
  • Java8 Stream流:过滤、归约与并行计算
  • VirtualBox中安装Win10教程
  • Joomla教程—常用模块 - 登录模块与常用模块 - 文章列表
  • RISC-V debug专栏1 --- Introduction
  • 杰文字悖论:效率提升的副作用
  • 文档处理利器Docling,基于LangChain打造RAG应用
  • 【Cursor/VsCode】在文件列表中不显示.meta文件
  • Vue 项目使用 pdf.js 及 Elasticpdf 教程
  • pyTorch框架:模型的子类写法--改进版二分类问题
  • 【Ragflow】11. 文件解析流程分析/批量解析实现
  • 计算机视觉算法实战——基于YOLOv8的自动驾驶障碍物实时感知系统
  • linux gcc
  • 【读书笔记·VLSI电路设计方法解密】问题62:什么是故障覆盖率,什么是百万缺陷率