2 条题解

  • 0
    @ 2023-7-28 23:07:18

    去年(2022.9.18)初赛的代码,记忆犹新

    归并排序求逆序对

    #include<cstdio>
    
    using namespace std;
    
    int n;
    
    int r[10010];//临时储存数组 
    
    int a[10010];
    
    long long int ans;
    
    void msort(int s,int t);//归并排序求逆序对
    
    int main()
    
    {
    
    	scanf("%d",&n);
    
    	for (int i=1;i<=n;i++)
    
    	{
    
    		scanf("%d",&a[i]);
    
    	}
    
    	msort(1,n);
    
    	printf("%lld",ans);
    
    	return 0;
    
    } 
    
    void msort(int s,int t)//归并排序求逆序对 
    {
    
    	if (s==t)//递归终止条件 
    
    		return;
    
    	int mid=(s+t)/2,i=s,j=mid+1;
    
    	msort(s,mid);//左序列排序
    
    	msort(mid+1,t);//右序列排序 
    
    	//合并左右序列
    
    	int k=s;
    
    	while (i<=mid&&j<=t)
    
    	{
    		if (a[i]>a[j])//前面的比后面的要更大 
    
    		{
    
    			ans+=mid-i+1;//都需要交换 
    
    			r[k]=a[j]; 
    
    			j++;
    
    			k++;
    
    		} 
    
    		else //不用交换
    
    		{//a[i]<=a[j] 
    
    			r[k]=a[i];
    
    			k++;
    
    			i++;
    
    		} 
    
    	} 
    
    	while (i<=mid)//剩下的进入数组 
    
    	{
    
    		r[k]=a[i];
    
    		i++;
    
    		k++;
    
    	}
    
    	while (j<=t)//剩下的进入数组
    
    	{
    
    		r[k]=a[j];
    
    		j++;
    
    		k++;
    
    	}
    
    	for (int p=s;p<=t;p++)//放回原数组 
    
    	{
    
    		a[p]=r[p];
    
    	}
    
    }
    
    • 0
      @ 2023-2-19 17:16:40
      //冒泡排序 ,不解释
      #include<iostream>
      using namespace std;
      int a[10000];
      int main()
      {
      	int n,m=0;
      	bool flag;
      	cin>>n;
      	for(int i=1;i<=n;++i)
      	 cin>>a[i];
      	for(int i=1;i<=n-1;i++)	//n个数排n-1趟 
      	 {
      	 flag=true;
      	 for(int j=1;j<=n-i;j++)//每趟排序的比较次数 
      	  if(a[j]>a[j+1])       //从小到大排序,前一数小于后一个数 
      	   {
      	   	int temp=a[j];		//两个数交换 
      	   	a[j]=a[j+1];
      	   	a[j+1]=temp;
      	   	m++;
      	   	flag=false;
      	   }
      	  if(flag) break;
      	 }
      	
      	 cout<<m<<endl;
      	return 0;
      }
      
      • 1

      信息

      ID
      436
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      46
      已通过
      21
      上传者