闲来无事,手写一遍三种排序。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
//快排
void quick_sort(int v[],int s,int e)
{
if (s>=e)
return ;
int key = v[s];
int i=s;
int t=e;
while (i<t)
{
while (i<t && v[t] >= key)
t--;
v[i] = v[t];
while (i<t && v[i] <=key)
i++;
v[t] = v[i];
}
v[i] = key;
quick_sort(v,s,i-1);
quick_sort(v,t+1,e);
}
//堆排序
void adjust(int v[],int i,int n)
{
while (i*2+1<=n)
{
int next=i*2+1;
if (i*2+2<=n && v[i*2+2]>v[i*2+1])
next=i*2+2;
if (v[i]<v[next])
{
int t=v[i];
v[i]=v[next];
v[next]=t;
i=next;
}
else
break;
}
return ;
}
void heap_sort(int v[],int n)
{
for (int i=(n-1)/2;i>=0;i--)
adjust(v,i,n);
for (int i=0;i<=n;i++)
{
int t=v[0];
v[0]=v[n-i];
v[n-i]=t;
adjust(v,0,n-i-1);
}
}
//基数排序
int maxd(int v[],int n)
{
int d=1;
int m=1;
for (int i=0;i<=n;i++)
{
while (v[i]/m>=n)
{
m*=10;
d++;
}
}
return d;
}
void radix_sort(int v[],int n)
{
int d=maxd(v,n);
int p=1;
vector <int> mv[10];
while (d--)
{
for (int i=0;i<n;i++)
{
int t=((v[i]/p)%10);
mv[t].push_back(v[i]);
}
int s=0;
for (int i=0;i<=9;i++)
{
for (int t=0;t<mv[i].size();t++)
{
v[s++]=mv[i][t];
}
mv[i].clear();
}
p*=10;
}
}
int main()
{
int v[10];
for (int i=0;i<10;i++)
cin>>v[i];
//quick_sort(v,0,9);
//heap_sort(v,9);
//radix_sort(v,10);
for (int i=0;i<10;i++)
cout<<v[i]<<" ";
cout<<endl;
}