zoukankan      html  css  js  c++  java
  • 微软面试题:求一个序列的逆序对数

    双层循环排序,时间为O(n2)

    归并排序时间为O(nlog(n))

    #include<iostream>
    #include<cstdio>
    #include<vector>
    using namespace std;
    int cnt=0;
    void merge(vector<int> & nums,int left,int mid,int right);
    void mergesort(vector<int> & nums,int start,int end);
    int main(){
        int exa[8]={1, 7, 2, 9, 6, 4, 5, 3};
        vector<int> arr;
        for(int i=0;i<8;i++){
            arr.push_back(exa[i]);
        }
        mergesort(arr,0,arr.size()-1);
        printf("逆序对数为: %d
    ",cnt);
        return 0;
    }
    void merge(vector<int> &nums,int left,int mid,int right){
        vector<int> temp;
        int l=left,r=right;
        while(l<=mid && r<=right){
            if(nums[l]>nums[r])
                {temp.push_back(nums[r++]);cnt+=mid-l+1;}
            else
                temp.push_back(nums[l++]);
        }
        while(l<=mid)
            temp.push_back(nums[l++]);
        while(r<=mid)
            temp.push_back(nums[r++]);
        for(int i=0;i<temp.size();i++)
            nums[left+i]=temp[i];
    }
    void mergesort(vector<int> &nums,int start,int end){
        if(start>=end) return;
        int mid=(end-start)/2+start;
        mergesort(nums,start,mid);
        mergesort(nums,mid+1,end);
        merge(nums,start,mid,end);
    }
  • 相关阅读:
    webpack基本使用
    vue-路由-显示名称
    vue-父组件和路由
    vue-路由
    vue-父子组件和ref
    vue-组件
    go-面向对象编程(上)
    JavaScript的历史
    vue-列表动画
    钩子函数实现小球弹落
  • 原文地址:https://www.cnblogs.com/joelwang/p/10682604.html
Copyright © 2011-2022 走看看