一、桶排序
桶排序:就是将相同元素放入一个数组,之后输出
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int a[10]={0},t,i;
for(i=0;i<5;i++)
{
scanf("%d",&t);
a[t]++;
}
for(i=0;i<10;i++)
{
while(a[i]) printf("%d ",i),a[i]--;
}
return 0;
}
/*
测试数据:
3 2 4 3 5*/
二、冒泡排序
复杂度O(N^2)
//冒泡排序
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(void)
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j]) //从小到大
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
/*测试数据:
6
6 2 4 1 5 3
*/
三、快速排序
方法:找到一个基点,将小于基准点的数全部放到左边,大于基准点的数全部放到右边。
//快速排序
#include<bits/stdc++.h>
using namespace std;
int a[20];
void quick_sort(int l,int r)
{
if(l>r) return ;
int temp,i,j;
temp=a[l]; //temp是基准数
i=l;
j=r;
while(i!=j)
{
while(temp<=a[j]&&i<j) j--; //先从右向左遍历
while(temp>=a[i]&&i<j) i++; //再从左向右遍历
if(i<j) swap(a[i],a[j]);
}
a[l]=a[i]; //最终基准数归位
a[i]=temp;
quick_sort(l,i-1); //递归处理左边的
quick_sort(i+1,r); //递归处理右边的
}
int main(void)
{
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quick_sort(1,n);
for(i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
/*输入样例:
10
6 1 2 7 9 3 4 5 10 8
*/