算法之选择排序法和冒泡排序法

本文介绍了选择排序和冒泡排序两种基础排序算法的工作原理。选择排序法通过不断找到未排序序列中的最小元素并放置到已排序序列的正确位置来完成排序。冒泡排序则是通过相邻元素之间的比较和交换,确保每次比较后最大的元素逐步向后移动,最终达到排序的目的。文章以生动的比喻解释了这两种排序方法,并提供了简单的代码实现示例。

选择排序法:

 选择排序法,顾名思义,先选择,再排序。

比如说一排十个小朋友,我们要按个头,从小到大排序,那么如何用选择排序法呢?

首先牵起第一个小朋友安安的小手,把他从第一个位置拽出来,现在第一个位置空出来了,

然后让第一个小朋友跟其余的小朋友比个头,如果安安跟九个小朋友比完他的个头还是最小的,

那么就继续让他占第一个位置,如果在比个头中,有一个小朋友的个头比安安小,

那么这个小朋友就和安安换位置,确保第一个位置是个子最小的小朋友占的。

第一个位置固定后,我们牵起第二个小朋友全全的手,带她出来,空出第二个位置,按同样的道理比个头,当全全的个头是剩下九个人里最小的,她还继续占第二个位置,如果有小朋友比她个头还小,两人换位置,以此类推.......

总结一下选择排序法的思想:

  1. 先在未排序的序列中找到最小的元素,放在第一个位置
  2. 在剩余未排序的元素中重复寻找最小的元素,放在第二个位置
  3. 以此类推,直到所有元素排序完

看看代码如何实现:

#include<iostream>
using namespace std;

int main()
{
	int arr[10], i, j, min, t;
	cout << "请输入十个数字,用来选择排序" << endl;
	for (i = 0; i < 10; i++)
	{
		cin >> arr[i];
	}
	for (i = 0; i < 10 - 1; i++)
	{
		min = i;
		for (j = i + 1; j < 10; j++)
		{
			if (arr[min]>arr[j])
			{
				min = j;
			}
		}
		t = arr[min];
		arr[min] = arr[i];
		arr[i] = t;
	}
	for (i = 0; i < 10; i++)
	{
		cout << arr[i] << " ";
	}
	system("pause");
	return 0;
}

随便举个例子: 

 冒泡排序法

冒泡排序法,像小鱼吐泡泡,一个挨一个,相邻比较

还是上面一排十个小朋友,第一个安安跟第二个全全比较,如果安安个子比全全矮,那安安还是占第一个位置,那么全全就跟第三个小朋友步步比较;如果全全个子比安安矮,那么安安跟全全就互换位置,再由换到第二位置的全全跟第三位置的步步进行比较,以此类推,相邻的小朋友进行比较,保证个子更小的小朋友站在靠前的位置,这样比较一轮下来,我们能保证最后一个小朋友一定是个子最高的,按此方法,再进行轮番比较,就能保证倒数第二个小朋友的个子是十个小朋友里个子第二高的...........直到轮完到第一个小朋友是最矮的,排序完成

总结冒泡排序的思想:

  1. 比较相邻的元素,如果第一个比第二个大,交换
  2. 对每一对相邻元素重复第一步动作 ,一轮完成后最后的元素会是最大的数固定这个数
  3. 除了最后一个,重复上两步
  4. 持续重复,直到没有任何一个元素需要比较

下面看看代码如何实现:

#include<iostream>
using namespace std;

int main()
{
	int arr[10],i,j,t;
	cout << "输入10个数,用来冒泡排序" << endl;
	for (i = 0; i < 10;i++)
	{
		cin >> arr[i];
	}
	for (i = 0; i < 9;i++)
	{
		for (j = 0; j < 9 - i;j++)
		{
			if (arr[j]>arr[j+1])
			{
				t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
	}
	for (i = 0; i < 10;i++)
    {
		cout << arr[i] << " ";
    }
    system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值