C++ 实现求一串数字的逆序数{线性代数里的逆序数}

来源:互联网 发布:正版用友软件价格 编辑:程序博客网 时间:2024/05/16 18:26

从左至右按由小到大排列称为【顺序】,若其中《有任意一个较小的数排在较大的数的右边》,则这种排列即为【逆序】,一组排列中,每一个数都有相应的逆序数,各数的逆序数之和即为该排列的逆序数。
如,排列 124365 :N(124365)=0+0+1+0+1+0=2(因为1、2、3、5右边没有比它们自身小的数;4、6右边各有一个数比它们自身小。)


代码:

#include<iostream>using namespace std;int n1=0;int b[50];int inversions(int a[], int n)//求逆序数{n = n - 1;//5个元素0~4,最高位是4int i, j, ans=0;for (j = 0; j <= n ; j++)//每一位"j"for (i = j; i <= n ; i++)//每位往后看逆序"从j到底与i比"{if (a[j] > a[i])ans++;}return ans;}void StrToArr(char a[])//字符转整形{int i = 0;while (a[i] != '\0'){b[i] = (int)a[i];i++;}b[i] = a[i];//等同于b[i]='\0'n1 = i;//取得总位数}int main(){int sum = 0;char a[50];cout << "请输入一串数字(不用空格,均单个按十以内算)" << endl;gets_s(a);StrToArr(a);sum=inversions( b, n1);cout << sum;}


原创粉丝点击