车厢重组问题,给定一组数字,相邻两个数交换,最少交换几次可以排列成从小到大的顺序。

img

img

img

img


#include <iostream>
using namespace std;
int main()
{
    int a[10001], n, count = 0, temp;
    cin >> n;
    for (int k = 1; k <= n; k++)
    {
        cin >> a[k];
    }
    for (int i = 1; i <= n - 1; i++)
    {
        for (int j = 1; j <= n - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp;
                count++;
            }
        }
    }
    cout << count;
    return 0;
}

应该是你冒泡排序的循环条件写错了,

img

冒泡排序直接搞定
不用那么麻烦

#include<iostream>
using namespace std;
int main()
{
    int b=0;
    int N;
    cin>>N;
    int a[10000];
    for(int i=0;i<N;i++)
    {
        cin>>a[i];    
    }    
    for(int i=0;i<N;i++)
    {
        for(int j=i+1;j<N;j++)
        {
            if(a[j]<a[i])
            {
                int t=a[i];
                a[i]=a[j];
                a[j]=t;
                
                b+=1;
             } 
        }
    }
    cout<<b;
    return 0;
}