实验内容:
给定一个整数数组A=(a0,a1,…,an-1),如果i<j且ai>aj,则<ai,aj>是一个逆序对,例如数组(3,1,4,5,2)的逆序对有<3,1>,<2,2>,<4,2>,<5,2>。设计一个穷举算法求A中的逆序对的个数。
1.算法设计
对于一个给定的数组序列,依次从左往右取每一个元素,从该元素右边第一个元素开始向右扫描,遇到比它小的元素,则计数+1,直到处理完整个序列。
2.程序设计
// // Created by = on 2023/4/18. // #include<iostream> using namespace std; int main() { int a[] = {3, 1, 4, 5, 2}; int x = 0; int len=sizeof(a)/sizeof(int); int i, j; for (i = 0; i < len-1; i++) for (j = i + 1; j < len; j++) if (a[i] > a[j]) x++; cout<<"暴力法计算逆序对个数为 "<<x<<endl; }
3.复杂度分析
(1)时间复杂度
O(n2)
(2)空间复杂度
O(n)
4.实验结果
结果一
结果二