c++冒泡排序与选择排序区别与比较

  • 冒泡排序

  • 冒泡法排序概念:

    通过遍历一维数组,比较相邻元素大小,若大小关系合适就不改变数组顺序,若大小关系错误,就互换该相邻元素,直到数组元素满足从小到大或从大到小的顺序。

  • 冒泡法按从小到大顺序排序的步骤:
    1、我们假设数组第一个值(a[0])为整个数组最小值。
    2、比较第一个元素 (a[0])和第二个元素(a[1])大小,若a[0]<=a[1],则比较第二个 元素与第三个元素大小;若a[0]>a[1],则交换其位置,然后再比较第二和第三个元素大 小。
    3、依次类推,完成第一轮比较,此时最后一个元素就是整个数组的最大值。
    4、进行第二轮比较,依次比较第一个元素到倒数第二个元素大小,确定第二大的值。
    5、以此类推,完成所有元素的排序。

  • 代码实现:

{  //输入十个数字
	int temp;
	int a[10] = {};
	cout << "请输入十个数字:";
	for (int b = 0; b < 10; b++)
	{
		cin >> a[b];
	}

//双循环排序
	for (int i = 0; i < 10; i++)	//共有10轮排序
	{
		for (int j = 0; j < 9 - i; j++) 	//每一轮分别确定该轮排序的最大值
		{
			if (a[j] > a[j + 1])  //若相邻两元素不按从小到大顺序排列,则交换其位置。
			{
				temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
	//输出完成排序的数组
	for (int i = 0; i < 10; i++)
	{
		cout << a[i] << endl;
	}
}
  • 选择排序

  • 选择排序的概念:
    第一次从待排序数组中挑选最小值(或最大值)放在数组第一位,第二次选择剩下元素的最小值(或最大值)放在第二位,依次玩成所有排序。

  • 选择排序的 步骤:
    1、假设数组第一个元素是最小值,取其下标为最小值索引。
    2、依次比较其余元素与第一个元素大小,若其余某个元素小于第一个元素,取其下标作为最小值索引。依次完成所有元素的比较。
    3、若最小值索引不是0,交换最小值与第一个元素位置。
    4、根据上面方法从剩余元素中选取最小值放在第二个位置。
    5、依次完成所有排序。

  • 代码实现:

{
	int a[10] = {};
	//输入一个具有十个元素的数组
	cout << "请输入十个整数:" << endl;
	for (int i = 0; i < 10; i++)
	{
		cin >> a[i];
	}
	//选择排序
	for (int i = 0; i < 9; i++)
	{
		int temp;
		int minidx = i;  //确定每轮排序的最小值索引(第i轮就设第i个元素下标为最小值索引)
		for (int j = i + 1; j < 10; j++)
		{   //若有元素比a[minidx] 小,则该元素下标为最小值索引
			if (a[minidx] > a[j])
			{
				minidx = j;
			}
		}
		if (minidx != i)  //若最小值索引数值发生改变,交换a[i]与最小值位置
		{
			temp = a[i];
			a[i] = a[minidx];
			a[minidx] = temp;
		}
	}
	//输出完成排序的数组
	for (int i = 0; i < 10; i++)
	{
		cout << a[i] << endl;
	}
  • 比较冒泡排序与选择排序
    1、 冒泡排序中若元素大小顺序只要不对就要进行元素位置互换,而选择 排序每轮只根据最小值索引交换一次或不进行交换。
    2、冒泡排序直接根据数值去决定位置,而选择排序根据下标、索引交换元素。
    3、选择排序直接寻找最小值(最大值)放到数组首位(末尾)。

**望各位批评指正,谢谢 **

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值