桶排序:
#include<iostream>
#include <cstring>
using namespace std;
Int main()
{
int b[101],k,n;
memset(b,0,sizeof(b));//初始化
cin>>n;
for(int i=1;I<=n;i++)
{
cin>>k;
b[k]++;//將關鍵字等於k的值全部裝入第k桶
}
for(int i=0; i<=100;i++)
while (b[i]>0)
{
cout<<i<<" " ;
b[i]--;//輸出排序結果
}
cout<<endl;
}
快速排序:
#include<cstdio>
using namespace std;
int a[1000];
void mysort(int l,int r)
{
//從小到大排序
if(l<r)
{
int key,low,high;
key=a[l]; //取一個基準值,可以是任意,但這裏用的是區間最左邊的值
low=l; //區間左邊指針low
high=r; //區間右邊指針high
while(low<high)
{
while(low<high&&a[high]>=key)
high--;//區間右端的值大於基準,右端指針向區間左側逼近
if(low<high) //減少重複操作
a[low++]=a[high];//小於基準的放左邊
while(low<high&&a[low]<=key)
low++;//區間左端的值小於於基準,左端指針向區間右側逼近
if(low<high)
a[high--]=a[low]; //大於基準的放右邊
}
a[low]=key;//將基準放到相對於基準來說已經有序的位置(即基準左側都小於基準值,右側都大於基準值)
mysort(low+1,r);//分治基準左側
mysort(l,low-1);//分治基準右側
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
mysort(0,n-1);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
當然我們有STL:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,num[100010];
int main()
{
scanf("%d",&n);
for(int i = 1;i <= n;i ++)
scanf("%d",&num[i]);
sort(num+1,num+1+n);
for(int i = 1;i <= n;i ++)
printf("%d ",num[i]);
return 0;
}
歸併排序:
#include <iostream>
using namespace std;
int t[200000],arr[200000],n;
long long num=0;
void msort(int l,int r)
{
if(l==r)return;
int mid=(l+r)/2;
int a=l,b=mid+1,c=1;
msort(l,mid);
msort(mid+1,r);
while(a<=mid&&b<=r)
{
if(arr[a]>arr[b])
{
t[c]=arr[b];
num+=mid-a+1;
c++;b++;
}
else
{
t[c]=arr[a];
c++;a++;
}
}
while(a<=mid)
{
t[c]=arr[a];
a++;c++;
}
while(b<=r)
{
t[c]=arr[b];
b++;c++;
}
for(int i=1;i<=r-l+1;i++)
arr[l-1+i]=t[i];
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
cin >> arr[i];
msort(1,n);
for(int i = 1; i <= n; i ++)
cout << arr[i] <<" ";
return 0;
}
當然啦我們還有STL:
#include<cstdio>
#include<algorithm>
using namespace std;
int n,num[100010];
int main()
{
scanf("%d",&n);
for(int i = 1;i <= n;i ++)
scanf("%d",&num[i]);
stable_sort(num+1,num+1+n);
for(int i = 1;i <= n;i ++)
printf("%d ",num[i]);
return 0;
}
當然啦排序算法不只有這些呢!
這些只是一些比較優良實用的算法 那些複雜度高的爲什麼要用泥233(⊙o⊙)?
NOIP2016 RP++!