前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序算法-2

排序算法-2

作者头像
AngelNH
发布2020-04-14 20:24:34
2090
发布2020-04-14 20:24:34
举报
文章被收录于专栏:AngelNIAngelNI

桶排序,又简单,又快速,适合处理大量数据

桶排序

代码语言:javascript
复制
#include<iostream>
using namespace std;
int n ;
int a[1000];
//   O(m+n)
int main()
{
    while(cin>>n)
    {
        for(int i=1;i<=n;++i)
        {
            int t;
            cin>>t;
            a[t]++;
        }
        //桶排序
        for(int i = 1;i<1000;++i)//从小到大
        //for(int i =1000-1;i>=0;--i)//从大到小
        {
            for(int j =1;j<=a[i];++j)
            {
                cout<<i<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}

归并排序

代码语言:javascript
复制
#include<iostream>
using namespace std;
typedef long long ll;
ll a[1000000];
void merge(ll *A,ll start,ll mid,ll end)
{
	ll p =start,q = mid+1;
	ll arr[end-start+1],k =0;
	for(ll i =start;i<=end;i++)
	{
		if(p>mid)
			arr[k++] = A[q++];
		else if(q>end)
		{
			arr[k++] = A[p++];
		}
		else if(A[p]<A[q])
		{
			arr[k++] = A[p++];
		}
		else
		{
			arr[k++] = A[q++];
		}
	}
	for(int p=0;p<k;++p)
	{
		A[start++] =arr[p];
	}
}
void mergesort(ll *A,ll start,ll end)
{
	if(start<end)
	{
		ll mid = (start+end)/2;
		mergesort(A,start,mid);
		mergesort(A,mid+1,end);
		merge(A,start,mid,end);
	}
}
int main()
{
    int n;
    while(cin>>n)
    {
        for(int i =0;i<n;++i)
            cin>>a[i];
        mergesort(a,0,n-1);
        for(int i=0;i<n;++i)
            cout<<a[i]<<" ";
        cout<<endl;
    }
    return 0;
}

堆排序

代码语言:javascript
复制
#include<iostream>
using namespace std;
typedef long long ll;
ll a[100000];
void swap(ll *a,ll i,ll j)
{

	ll t = a[i];
	a[i] = a[j];
	a[j] = t;
}
void heapify(ll *tree,ll n,ll i)
{
	if(i>=n)
		return ;
	ll c1 = 2*i+1;
	ll c2 = 2*i+2;
	ll max = i;
	if(c1<n&&tree[c1]>tree[max])
	{
		max = c1;
	}
	if(c2<n&&tree[c2]>tree[max])
	{
		max = c2;
	}
	if(max != i)
	{
		swap(tree,max,i);
		heapify(tree,n,max);
	}
}
void heapsort(ll *a,ll n)
{
	for(ll i =n/2-1;i>=0;i--)
	{
		heapify(a,n,i);
	}
	for(ll i=n-1;i>=0;i--)
	{
		swap(a,i,0);
		heapify(a,i,0);
	}
}
int main()
{
    int n;
    while(cin>>n)
    {
        for(ll i =0;i<n;++i)
            cin>>a[i];
        heapsort(a,n);
        for(ll i =0;i<n;++i)
            cout<<a[i]<<" ";
        cout<<endl;
    }
    return 0;
}

qsort

c++的函数库

代码语言:javascript
复制
#include<iostream>
#include<cstdlib>
using namespace std;
int cmp(const void *a,const void *b)
{
    return *(int *)a - *(int *)b;
}
int main()
{
    int n = 10;
    int a[10] = {-7,6,2,0,3,9,8,4,1,5};
    qsort(a,n,sizeof(n),cmp);
    for(int i =0;i<=10;++i)
        cout<<a[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-07|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 桶排序
  • 归并排序
  • 堆排序
  • qsort
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档