zoukankan      html  css  js  c++  java
  • 剑指offer-面试题51-数组中的逆序对-归并排序

    /*
    题目:
    	求给定数组的逆序对数。
    */
    /*
    思路:
    	归并排序。
    */
    
    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    #include<map>
    
    
    using namespace std;
    
    
    int merge(int A[], int left,int mid,int right){
       int myCount = 0;
       int p1 = left;
       int p2 = mid + 1;
       int temp[right-left+1];
       int i = 0;
       while(p1 <= mid && p2 <= right){
            if(A[p1] > A[p2]){
                myCount = myCount + 1 + mid - p1;//右边数字大于左边数字的个数。
                temp[i] = A[p2];
                p2++;
            }else{
                temp[i] = A[p1];
                p1++;
            }
            i++;
    
       }
       while(p1 <= mid){
            temp[i++] = A[p1++];
       }
       while(p2 <= right){
            temp[i++] = A[p2++];
       }
       for(int i = left; i <= right; i++){
            A[i] = temp[i-left];
       }
       return myCount;
    }
    int sort(int A[], int left,int right) {
        if(left == right){
           return 0;
        }
        int mid = left + ((right-left) / 2);
        //cout<<left<<" "<<mid<<" "<<right<<endl;
        int num1 = sort(A,left,mid);
        int num2 = sort(A,mid+1,right);
        return merge(A,left,mid,right) + num1 + num2;
    }
    
    int main(){
        int a[] = {1,3,7,2,4,1};
        cout<<sort(a,0,5)<<endl;
        for(int i = 0; i < 6;i++){
            cout<<a[i]<<" ";
        }
        return 0;
    }
    

        

  • 相关阅读:
    Linux基本命令
    LR之流程
    Jmeter&Ant构建自动化测试平台
    正则表达式
    搭建wordpress-安装xshell
    git本地文件提交
    Git基本操作
    python-之基本语法
    SQL语句之-简单查询
    postman之请求&断言
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/12074959.html
Copyright © 2011-2022 走看看