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;
}