C++冒泡排序使用

Python实现冒泡排序与自定义结构排序详解

排序

排序就是给已有的数据容器按照自己想要的顺序给数据排序。

冒泡排序

思想:一个一个元素拿出来,与每一元素进行比较,如果是大于的就交换元素,继续比较。

给数组排序

int a[10];
int n=sizeof(a)/sizeof(a[0]);
forint i=0:i<n-1;i++)//不用与自己比较次数-1
{
	for(int j=0;j<n-i-1;j++)//这个元素比较一轮之后,当前比较一轮中最大的元素,就不用再次比较了
	{
		if(a[j]>a[j+1])
		{
			int temp=a[j];
			a[j]=a[j+1];
			a[j+1]=a[j];
		}
	}
}

给std::vector排序

vector是有自己的排序的算法的。stl也是有排序算法的。这里我们使用冒泡法排序一下。

	std::vector<int>ve_uint{ 1, -2, 3,-4, 5, -6, 7, -8, -9, 10 };
	for (int i = 0; i < ve_uint.size() - 1; i++)
	{
		for (int j = 0; j < ve_uint.size() - i - 1; j++)
		{
			if (ve_uint[j] > ve_uint[j + 1])
			{
				int temp = ve_uint[j];
				ve_uint[j] = ve_uint[j + 1];
				ve_uint[j + 1] = temp;
			}
		}
	}

给std::vector<自定义的数据结构>排序

这里的就是比较贴近日常我们排序使用的自定义的排序顺序。

int main()
{
	struct student
	{
		int age;
		int level;

		bool operator>(student b)
		{
			if (age > b.age)
			{
				return true;
			}
			else if (age == b.age)
			{
				if (level >= b.level)
				{
					return true;
				}
				else
				{
					return false;
				}
			}
			else
			{
				return false;
			}
		}
	};

	//准备数据
	std::vector<student>ve_stu;
	student stu1{ 10,15 }; ve_stu.push_back(stu1);
	student stu2{ 11,11 }; ve_stu.push_back(stu2);
	student stu3{ 10,19 }; ve_stu.push_back(stu3);
	student stu4{ 13,10 }; ve_stu.push_back(stu4);
	student stu5{ 17,18 }; ve_stu.push_back(stu5);
	student stu6{ 19,19 }; ve_stu.push_back(stu6);
	student stu7{ 18,10 }; ve_stu.push_back(stu7);
	student stu8{ 10,10 }; ve_stu.push_back(stu8);
	student stu9{ 12,15 }; ve_stu.push_back(stu9);
	student stu0{ 14,10 }; ve_stu.push_back(stu0);

	
	for (int i = 0; i < ve_stu.size() - 1; i++)
	{
		for (int j = 0; j < ve_stu.size() - i - 1; j++)
		{
			if (ve_stu[j] > ve_stu[j + 1])
			{
				student stu;
				stu = ve_stu[j];
				ve_stu[j] = ve_stu[j + 1];
				ve_stu[j + 1] = stu;
			}
		}
	}
	for (int i = 0; i < ve_stu.size(); i++)
	{
		printf("%d\t%d\n", ve_stu[i].age, ve_stu[i].level);
	}
	printf("\n");

	return 0;
}

今天先写到这里,有时间再总结其他的排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值