交换次数:
输入N个整数,如果每次只能交换相邻的2个数,要把数组从小到大排序,至少需要交换几次?
输入格式
第一行1个正整数:N,范围在[1,1000]。
第二行N个整数,每个整数范围在[0,1000000]。
输出格式
一行N个从小到大的整数。
输入/输出例子1
输入:
4
5 3 6 1
输出:
4
样例解释
无
#include<bits/stdc++.h>
using namespace std;
int a[100005],n,s;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;i<=n;i++)
{
int tmp=a[i],k=1;
while(a[k]<=tmp)
{
k++;
}
for(int j=i-1;j>=k;j--)
{
a[j+1]=a[j];
s++;
}
a[k]=tmp;
}
cout<<s;
return 0;
}
主代码分析:
for(int j=i-1;j>=k;j--)
{
a[j+1]=a[j];
s++;
}
a[k]=tmp;
插入时,每次插入就技术!!!
如有不懂,可看上次解析!!!