蛮力法求解最大元素和次大元素

实验目的:

通过本次实验,掌握蛮力算法的基本思想。

实验环境:

硬件:PC机
软件:windows操作系统,C语言

实验内容:

给定一个整数数组A=(a0,a1,…,an-1),若i<j且ai>aj,则<ai,aj>就为一个逆序对,例如数组(3,1,4,5,2)的逆序对有<3,1>,❤️,2>,<4,2>,<5,2>。设计一个穷举算法求A中的逆序对的个数。

实验过程:

1.算法设计

在这里我们要采用蛮力法解决求逆序对个数的问题,所以,先设置一个变量ans来记录逆序对的个数.然后设置两层for循环来依次比较每个元素与其后面的元素的大小,外层循环设置为i
= 0,则内层循环 为了避免与每个元素与自己比较,则设置为j = j + 1. 如果该元素的值大于后面元素的值,满足条件,则逆序数加一,ans ++ 否则继续循环,直到结束为止.最后输出该数组逆序对的个数.

2.程序清单

# include <stdio.h>
# include <iostream>
using namespace std;
int solve(int a[],int n)
{
	// 定义一个变量来记录逆序对的个数
	int ans = 0;
	// 设置两层循环进行遍历
	for(int i=0;i<n-1;i++)
		for(int j=i+1;j<n;j++)
			// 判断是否可以组成逆序对
			if(a[i]>a[j])
			  // 条件满足,逆序数加一
              ans++;
	// 返回逆序数的个数
    return ans;
}
int main()
{
	int a[] = {3,1,4,5,2};
	int n = sizeof(a)/sizeof(a[0]);
	cout <<"逆序对的个数是"<<solve(a,n)<<endl;
	return 0;
}

3.复杂度分析

时间复杂度

这种做法假设数组中有 n 个数字,每个数字都要和 O(n) 个数字比较,因此算法的时间复杂度是 O(n^2)

4.运行结果

在这里插入图片描述

实验总结:

通过这次课程设计的程序实践,我实在获益匪浅!这次的程序设计对我来说无疑是一个具大的考验,课下我就一直为实现程序而努力,翻阅相关书籍、在网上查找资料。因为开始时基础不是很好,过程中遇到了不少的阻碍,编写程序的进度也比较慢。但是通过努力,我对这次实验的原理有了一定的理解,终于写出了本次课程设计的核心算法,并使其能够正常的运行。
这次的设计工作,让我体会到了作为一个编程人员的艰难,一个算法到具体实现,再到应用层面的开发是需要有一段较长的路要走的,不是一朝一夕就可以实现的,而且在编好程序后,编程人员还要花很多的时间去完善它,其中的辛苦,很难用言语表达出来。今后,我会更加努力的学习专业知识,努力提高自我的能力。同时,也非常感谢老师上课讲授的知识!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值