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);
    }
  • 相关阅读:
    eclipse 不自动提示和Alt + / 没提示和eclipse增强代码提示
    uboot 添加命令
    ps and kill command
    C 类型volatile 的作用
    git tutorial
    python 与命令
    C++ new and delete
    Glade3 tutorial in chinese
    查找IP与MAC
    ns3 无线资料
  • 原文地址:https://www.cnblogs.com/joelwang/p/10682604.html
Copyright © 2011-2022 走看看