Java教程

排序

本文主要是介绍排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

排序

一、快排 \(quick sort\)

#include<bits/stdc++.h>
using namespace std;
int a[10001];
void kp(int l,int r)
{
    int mid=a[(l+r)/2];
    int i=l,j=r;
    while(i<=j)
    {
        while(a[i]<mid)
        {
            i++;
        }
        while(a[j]>mid)
        {
            j--;
        }
        if(i<=j)
        {
            swap(a[i],a[j]);
            i++,j--;
        }
        if(l<j)
        {
            kp(l,j);
        }
        if(i<r)
        {
            kp(i,r);
        }
    }
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	kp(1,n);
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	}
    return 0;
}

二、归并\(mergersort\)

#include<bits/stdc++.h>
#define N 500000
using namespace std;
int n,a[N],b[N];
long long ans=0;
void merger(int l,int mid,int r)
{
	int k=l,i=l,j=mid+1;
	while(i<=mid&&j<=r)
	{
		if(a[i]>a[j])
		{
			ans+=mid-i+1;
		}
		b[k++]=a[i]<=a[j]?a[i++]:a[j++];
	}
	while(i<=mid)
	{
		b[k++]=a[i++];
	} 
	while(j<=r)
	{
		b[k++]=a[j++];
	} 
	for(int i=l;i<=r;i++) 
	{
		a[i]=b[i];
	}
}

void mergersort(int l,int r)
{
	if(l==r)
	{
		return ;
	} 
	int mid=(l+r)/2; 
	mergersort(l,mid);
	mergersort(mid+1,r);
	merger(l,mid,r);
}

int main ()
{
	cin>>n;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i];
	}
	mergersort(1,n);
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<" ";
	} 
}
这篇关于排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!