sicily-1930.排序

1930. 排序

Description


我们都知道,在排序算法中需要进行多次比较。若比较的两个数Ai, Aj(i<j),Ai>Aj的话,则称作有效比较。给定一个有N个互异元素的整数序列,请使用选择排序对序列进行排序,并输出其有效比较次数。这里假设使用的是标准的排序算法,并且从下标小到大的顺序进行枚举。
比如,给定序列[4,1,3,2],选择排序的有效比较按顺序有(4,1), (4,3), (3,2)。

Input

 第一行为一个整数t,表示测试用例个数。对于每个测试用例,第一行包含一个整数n(0<n<100),表示序列的元素个数。接下来一行包含n个互不相同的整数,表示序列的元素。

Output

为每个测试用例单独输出一行表示使用标准的选择排序的有效比较次数。 

Sample Input
2
4
4 1 3 2
3
3 2 1

Sample Output
3
2


代码没有什么好讲的,就是一个选择排序


选择排序的基本思想如下:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。




// 1930. 排序
// 2016.11.16

#include <iostream>
#include <cstring>
using namespace std;

int a[110];

int main()
{
	int t,n;
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=0;i<n;i++)
		{
			cin>>a[i];
		}
		
		int temp,cnt=0;
		
		for(int i=0;i<n-1;i++)
		{
			int least =i;
			
			for(int j=i+1;j<n;j++)
			{
				if(a[least]>a[j])
				{
					cnt++;
					least =j;
					
				}
				
				
			}
			temp = a[i];
			a[i] = a[least];
			a[least] = temp;
		}
		cout<<cnt<<endl;
		memset(a,0,sizeof(a));
	}
	return 0;
}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值