济南大学自动化学院C++第四次上机

本文介绍了C++实现冒泡排序的详细过程,包括算法原理、代码实现、时间复杂度和空间复杂度分析。冒泡排序是一种简单直观的排序算法,虽然效率较低,但在处理小规模数据时仍有一定的应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>

#include<string>

using namespace std;
class score {
public:
	score()
	{
		times = 2;
		cout << "默认学生为2" << endl;
	}
	score(int times1)
	{
		times = times1;
		cout << "自定学生人数" << endl;
	}
	~score()
	{
		cout << "~score" << endl;
	}

	void inputscore()
	{
		for (int i = 0; i < times; i++)
		{
			cout << "输入学生姓名" << endl;
			cin >> name[i];
			cout << "输入科目A成绩" << endl;
			cin >> grade[i][0];
			cout << "输入科目B成绩" << endl;
			cin >> grade[i][1];
			cout << "输入科目C成绩" << endl;
			cin >> grade[i][2];
		}
	}
	void showscore()
	{
		for (int i = 0; i < times; i++)
		{
			cout << "学生姓名是" << name[i] << endl;
			cout << "科目A成绩是" << grade[i][0] << endl;
			cout << "科目B成绩是" << grade[i][1] << endl;
			cout << "科目C成绩是" << grade[i][2] << endl;

		}
	}
	void showStuAvgScore()
	{
		//float avg = 0;
		for (int i = 0; i < times; i++)
		{
			float avg = 0;
			for (int j = 0; j <= 2; j++)
			{
				avg = avg + grade[i][j];
			}
			avg = avg / 3;
			cout << name[i] << "同学的平均值是" << avg << endl;
		}
	}
	void showSubAvgScore()
	{
		float avgA = 0;
		float avgB = 0;
		float avgC = 0;
		for (int i = 0; i < times; i++)
		{
			avgA = avgA + grade[i][0];
			avgB = avgB + grade[i][1];
			avgC = avgC + grade[i][2];
		}
		avgA = avgA / times;
		avgB = avgB / times;
		avgC = avgC / times;
		cout << "科目A的平均分是" << avgA << endl;
		cout << "科目B的平均分是" << avgB << endl;
		cout << "科目C的平均分是" << avgC << endl;

	}
	void sortSub()
	{
		float temp;
		for (int i = 0; i <= 2; i++)
		{
			for (int j = 1; j < times; j++)
			{
				if (grade[j][i] > grade[j - 1][i])
				{
					temp = grade[j][i];
					grade[j][i] = grade[j - 1][i];
					grade[j - 1][i] = temp;
				}

			}
			for (int j = 0; j < times; j++)
			{
				cout << grade[j][i] << " ";
			}
			cout << endl;
		}

	}
private:
	float grade[100][100];
	int times;
	string name[100];
};
int main()
{
	score x;
	x.inputscore();
	x.showscore();
	x.showStuAvgScore();
	x.showSubAvgScore();
	x.sortSub();
}

代码如上!

代码实现情况为

 

.冒泡法排序:
从第一个和第二个开始比较,如果第一个比第二个大,则交换位置,然后比较第二个和第三个,逐渐往后

经过第一轮后最大的元素已经排在最后,所以重复上述操作的话第二大的则会排在倒数第二的位置。

那重复上述操作n-1次即可完成排序,因为最后一次只有一个元素所以不需要比较。

代码实现如下:

void score::sortSub()
    {
        float temp;
        for (int i = 0; i <= 2; i++)
        {
            for (int j = 1; j < times; j++)
            {
                if (grade[j][i] > grade[j - 1][i])
                {
                    temp = grade[j][i];
                    grade[j][i] = grade[j - 1][i];
                    grade[j - 1][i] = temp;
                }
 
            }
            for (int j = 0; j < times; j++)
            {
                cout << grade[j][i] << " ";
            }
            cout << endl;


        冒泡排序是一种简单直接暴力的排序算法,每一轮比较可能多个元素移动位置,而元素位置的互换是需要消耗资源的,所以这是一种偏慢的排序算法,仅适用于对于含有较少元素的数列进行排序。

      稳定性:我们从代码中可以看出只有前一个元素大于后一个元素才可能交换位置,所以相同元素的相对顺序不可能改变,所以它是稳定排序。

      比较性:因为排序时元素之间需要比较,所以是比较排序。

      时间复杂度:因为它需要双层循环n*(n-1)),所以平均时间复杂度为O(n^2)。

      空间复杂度:只需要常数个辅助单元,所以空间复杂度为O(1),我们把空间复杂度为O(1)的排序成为原地排序(in-place)。

原文链接:https://blog.youkuaiyun.com/CTO_51/article/details/8852971

 原文链接:https://blog.youkuaiyun.com/LbinBB/article/details/89231346
原文链接:https://blog.youkuaiyun.com/LbinBB/article/details/89231346

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值