C++实现选择排序

选择排序是每一次从待排序的数据元素中找出最小的(或最大的)一个元素,放在序列的起始位置,然后,再从剩余元素中继续寻找最小(大)的元素,依次放在已排序序列的末尾,最终实现排序。

举一个简单例子

现有5个元素:9,2,5,7,6 对它进行排序,按从小到大排列

第一趟排序进行的过程

元素值92576
位置标号

        首先比较位置①和位置②元素的大小 ,9>2,则两者交换位置

29576

        比较位置①和位置③元素的大小,2<5,不用交换位置 

29576

        比较位置①和位置④元素的大小,2<7,不用交换位置 

29576

        比较位置①和位置⑤元素的大小,2<6,不用交换位置  

29576

此时元素2 已经被确认为整个数组中值最小的一个,位置已经确定不用再改动 

第二趟排序进行的过程

元素值29576
位置标号

         比较位置②和位置③元素的大小,9>5,则交换位置

25976

        比较位置②和位置④元素的大小,5<7,不用交换位置

25976

        比较位置②和位置⑤元素的大小,5<6,不用交换位置 

25976

此时元素5被确认为数列中第二小的元素 ,位置确定

第三趟排序进行的过程 

元素值25976
位置标号

         比较位置③和位置④元素的大小,9>7,则交换位置

25796

        比较位置③和位置⑤元素的大小,7>6,则交换位置 

25697

 此时元素6被确认为数列中第三小的元素 ,位置确定

 第四趟排序进行的过程 

元素值25697
位置标号

         比较位置④和位置⑤元素的大小,9>7,则交换位置

25679

至此,元素已经按照我们的要求按顺序排列完毕 

我们可以发现总共需要进行(元素个数-1)趟排序就可以完成顺序排列。

编写程序如下(利用程序产生的一组随机数进行验证)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	vector<int> vec;
	int x;
	cout << "please enter a number max,and computer get a rand number between 0-max: ";
	cin >> x;
	for (int i = 0; i < x; ++i)
	{
		vec.push_back(rand());
	}

	cout << "before sort vector elements: " << endl;
	for (auto c : vec)
	{
		cout << c << " ";
	}
	cout <<"\n\n\n\n\n";
	auto max=max_element(vec.begin(), vec.end());
	auto min = min_element(vec.begin(), vec.end());
	cout << "The max element in vec is : " << *max <<  endl;
	cout << "The min element in vec is: " << *min <<  endl;
	int ss = vec.size();
	for (int i = 0; i < ss - 1; i++)
	{
		for (int j = i + 1; j < ss; j++)
		{
			if (vec[i] > vec[j])
			{
				int temp = vec[i];
				vec[i] = vec[j];
				vec[j] = temp;
			}
		}
	}

	cout << "-------------------------------------------------------" <<
		"--------------------------------------------------------" <<
		"------------------------------------------------------------" <<
		"---------------------------------------------------------------------";
	cout << "after sort vector elements: " << endl;
	for (auto c:vec)
	{
		cout << c << " ";
	}
	return 0;
}

程序运行结果如下

也可以向其中输入重复元素检验其排序效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值