桶排序,又简单,又快速,适合处理大量数据
#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;
}
#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;
}
#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;
}
c++的函数库
#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;
}