题意:给出n个从1到n不规则排列的数据,要求换成从大到小的标准格式
分析:思路很简单,由于是从小到大,从第一个位置上的数开始处理,判断是否等于这个位置对应的数(1,2,3,4……),如果等于,处理下一个;不等于,从下一个数开始搜起,搜到等于这个位置的数时,进行一次交换,由于,是从第一个数开始搜起,所以前面的数据就不用重复的搜索,就是从i+1的位置开始搜索,然后搜到就终止这次循环(减时间的),用计数器记载交换的次数
贴下代码:(296k,438ms)
#include<iostream>
using namespace std;
int main()
{
int
t;
int n;
int
swap_times;
int
i
,
j;
cin
>>
t;
while(
t
--)
{
swap_times
=
0;
int
a
[
10005
]
=
{
0
};
cin
>>n;
for(
i
=
0 ;
i
< n ;
i
++)
{
cin
>>
a
[
i
];
}
for(
i
=
0;
i
<n;
i
++)
{
if(
a
[
i
]
!=
i
+
1)
{
for(
j
=
i
+
1 ;
j
<n ;
j
++)
if(
a
[
j
]
==
i
+
1)
{
swap(
a
[
i
],
a
[
j
]);
swap_times
++;
break;
}
}
}
cout
<<
swap_times
<<
endl;
}
}
using namespace std;
int main()
{
}