计算逆序数对

python语言:

#-*- coding:utf-8 -*-
#import pdb

def sort_count(data):
    """
    using merge sort and count inversion
    """
    global count
    count = 0
    def merge_sort(data):
        global count 
        if len(data)<2:
            return data
        
        left = merge_sort(data[:(len(data)//2)])
        right = merge_sort(data[(len(data)//2):])
        idx_left = idx_right = 0
        result = []
        while idx_left < len(left) and idx_right < len(right):
            if left[idx_left] <= right[idx_right]:
                result.append(left[idx_left])
                idx_left += 1
            else:
                result.append(right[idx_right])
                idx_right += 1
                count += len(left)-idx_left
        while idx_left < len(left):
            result.append(left[idx_left])
            idx_left += 1

        while idx_right < len(right):
            result.append(right[idx_right])
            idx_right += 1
        return result
    
    sorted_data = merge_sort(data)

    
    return count
        
        
class Ivrs_num(object):
    def __init__(self, filename):
        self.count = 0
        self.filename = filename
        
    def inverse_count(self):
        data = self.load_txt()
        def merge_sort(data):
        
            if len(data)<2:
                return data
        
            left = merge_sort(data[:(len(data)//2)])
            right = merge_sort(data[(len(data)//2):])
            idx_left = idx_right = 0
            result = []
            while idx_left < len(left) and idx_right < len(right):
                if left[idx_left] <= right[idx_right]:
                    result.append(left[idx_left])
                    idx_left += 1
                else:
                    result.append(right[idx_right])
                    idx_right += 1
                    self.count += len(left)-idx_left
            while idx_left < len(left):
                result.append(left[idx_left])
                idx_left += 1

            while idx_right < len(right):
                result.append(right[idx_right])
                idx_right += 1
            return result
        merge_sort(data)
        return self.count
        
    def load_txt(self):
        int_list = []
        with open(self.filename) as f:
            for line in f:
                int_list.append(int(line))
        return int_list
        

    
    


if __name__ == '__main__':

    m = Ivrs_num('IntegerArray.txt')
   
    print(m.inverse_count())
        



cpp版:
#include <iostream>

//Inversion Pair

int merge_sort(int a[], int len)
{
	if(len<2) return 0;
	int left[len/2],right[len-len/2];
	int i,j,index,inver=0;
	for(i=0;i<len/2;i++)
	{
		left[i]=a[i];
	}
	for(i=len/2,j=0;i<len;i++,j++)
	{
		right[j]=a[i];
	}
	inver += merge_sort(left, len/2);
	inver += merge_sort(right, len-len/2);
	index=0;
	i=0;
	j=0;
	while(i<len/2 && j<(len-len/2))
	{
		if(left[i] <= right[j])
		{
			a[index]=left[i];
			index++;
			i++;
		}
		else
		{
			a[index]=right[j];
			j++;
			index++;
			inver += len/2 - i;
		}
	}
	while(i<len/2)
	{
		a[index]=left[i];
		index++;
		i++;	
	}
	while(j<(len-len/2))
	{
		a[index]=right[j];
		index++;
		j++;
	}
	return inver;
}


int main()
{
	int len;
	std::cin>>len;
	int array[len],i;
	for(i=0;i<len;i++)
	{
		std::cin>>array[i];
	}
	
	std::cout<<merge_sort(array,len);
	/*
	int array[]={4,2,6,1,5,3,0};
	int count=0;
	std::cout<<merge_sort(array,7)<<std::endl;
	int i=0;
	for(i=0;i<7;i++)
	{
		std::cout<<array[i]<<" ";
	}
	*/
	return 0;
}



全部评论

相关推荐

2025-12-31 19:23
已编辑
门头沟学院 Java
ssob是已读不回的,字节是压根不敢投的,简历是反反复复改了N遍的,八股是永远背不完的😅😅😅扯远了,道心破碎了,把简历发出来让大伙先看看笑话。再说正事。寒假日常实习还是很难找,连个面试都难约,我不是个例,这是网上普遍反映。不报希望了,趁着2、3月前赶紧做些什么才是。扔几个碎碎念:1.这破简历还能怎么改?写到什么程度才能过实习岗筛选?广大牛友来锐评一下2.火速辅修go,是否可行目前看来是学习成本最小的。首先,很多go实习岗位已经明确要求掌握gin等技术栈,拿java简历投go的时代已经过去了。其次,很多后端的东西,MySQL、Redis这些都是通用的,不用重新学。所以这个问题就具体为:2.1&nbsp;java&amp;go混血简历怎么写第一个项目,仿大麦的微服务,不太好改。因为有用到Redisson、AOP、SpringAI这些java强相关的东西,包装成go需要替换这些方案。第二个,点评魔改。应该可以包装成go,github上也有人用go重写过。2.2&nbsp;java&amp;go通用的轮子RPC直接pass了,太烂大街了。不知道动态线程池能不能做。反正项目上新有风险,不一定来得及,非必要就不开新的项目。补充:别跟我扯RAG了,这玩意已经成新的烂大街了,详见我上一篇的吐槽。3.认真学微调prompt什么的这个半步踩进算法了已经。八股和场景题完全就是另一套,没两三个月搞不定的。约等于换方向
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务