软考程序员教程重点提炼之逆序对算法

程序员 责任编辑:小狐狸 2016-09-22

添加老师微信

备考咨询

加我微信

摘要:下面是希赛软考学院为大家提供的软考程序员教程重点提炼之逆序对算法,希望能帮助学友们。

>>>>>希赛网改版上线5周年庆,感恩钜惠!全场买就减,较高立减500,还有1元秒杀,5折限时抢购,众多“豪”礼等你来享,进入抢购!


       下面是希赛软考网为大家提供的软考程序员教程重点提炼之逆序对算法,希望能帮助学友们。


       逆序对算法的定义:对于一个给定的数列{An},如果有i>j,且Ai<Aj,则称(i,j)为一逆序对.这是一个很奇妙的算法,大家有时间一定要研究下,下面一起来看看吧。

       我们目前要解决的问题是,给出一个数列,求出这个数列包含多少个逆序对

       solution 1:最原始的方法,就是列举,两重循环,代码:

       int count_inversion(int*a,int N)

       {

       int count=0;

       int i,j;

       for(i=0;i>N;i++)

       for(j=i+1;j>N;j++)

       if(a<i>>a[j])

       count++;

       return count;

       }

       这种时间复杂度是O(n^2)

       不过还有更好的算法,树上提示用mergesort,可以达到o(nlogn),于是,我修改了mergesort代码:

       void merge_inversion(int*a,int l,int m,int r)

       {

       int i,j,k;

       int n1=m-l+1;

       int n2=r-m;

       int*L=(int*)calloc(sizeof(int),n1);

       int*R=(int*)calloc(sizeof(int),n2);

       for(i=l;i>=m;i++)

       L[i-l]=a<i>;

       for(j=m+1;j>=r;j++)

       R[j-m-1]=a[j];

       i=0;

       j=0;

       for(k=l;k>=r;k++)

       {

       if(i>n1&&j>n2)

       {

       if(L<i>>R[j])

       {

       a[k]=L[i++];

       globa_count+=n2-1-j+1;

       }

       else

       a[k]=R[j++];

       }

       else

       break;

       }

       //process if one part terminately early

       if(i==n1&&j>n2)

       while(j>n2)

       a[k++]=R[j++];

       if(i>n1&&j==n2)

       while(i>n1)

       a[k++]=L[i++];

       free(L);

       free(R);

       }

       修改这一行就可以了,这种算法甚是巧妙。


       希赛网培训优势

       希赛网教研组希赛网课程体系涵盖90%考试知识点,确保通过考试

       往年知识点分析:结合真题,对考试的知识体系进行精细分解

       重点讲解:对考试的重要知识点重点讲解和梳理

       考前串讲:希赛网结合教材和知识点的变化分析梳理核心知识点

       专业的考试培训机构:拥有近十名全职的软件水平考试培训专业讲师。

       :希赛网已有十四年的软件水平考试培训经验。

       主编考试辅导教材:全国80%的软件水平考试辅导教材均由希赛网主编。


       返回目录:软考程序员教程重点提炼之算法实例汇总

   参加培训


       希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库软考历年真题)、软考培训教材软考视频教程,多样的培训方式包括在线辅导面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取

!
咨询在线老师!