桶排序:
#include<iostream>
using namespace std;
int a[100];
int main()
{
int n;
scanf("%d",&n);
for(int i = 1; i<=n;i++)
{
int t;
scanf("%d",&t);
a[t]++;//把这个元素放在桶里
}
for(int i = 0;i<100;i++)
{
while(a[i])//输出
{
printf("%d ",i);
a[i]--;
}
}
}
冒泡排序:
原理:交换
#include<iostream>
using namespace std;
#define maxn 10000
int main()
{
int n;
scanf("%d",&n);
int a[maxn];
for(int i = 1 ;i<=n;i++)//输入
scanf("%d",&a[i]);
for(int i = 1;i<n;i++)//进行n-1遍循环
for(int j = 1;j<=n-i;j++)//左右交换
{
if(a[j]>a[j+1])
{
int temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
for(int i = 1;i<=n;i++)
printf("%d ",a[i]);
}
快速排序:
#include<iostream>
#include<cstdio>
using namespace std;
int a[101],n;
void quicksort(int left,int right)
{
int i,j,t,temp;
if(left>right)//不符合条件直接退出
return;
temp=a[left];//先存一个基准数
i = left;
j = right;
while(i!=j)
{
while(a[j]>=temp&&i<j)
j--;
while(a[i]<=temp&&i<j)
i++;
//两步遍历将基准数插进去
if(i<j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quicksort(left,i-1);
quicksort(i+1,right);
return;
}
int main()
{
scanf("%d",&n);
for(int i = 1;i<=n;i++)//输入
scanf("%d",&a[i]);
quicksort(1,n);//排序
for(int i = 1;i<=n;i++)//输出
printf("%d ",a[i]);
return 0;
}
插入排序:
#include<iostream>
using namespace std;
int a[1000],n;
void insertsort(int a[],int n)
{
int v,j;
for(int i = 1;i<n;i++)
{
v = a[i];
j = i - 1;
while(j>=0&&a[j]>v)
{
a[j+1] = a[j];
j--;
}
a[j + 1] = v;
}
}
int main()
{
scanf("%d",&n);
for(int i = 0;i<n;i++)
scanf("%d",&a[i]);
insertsort(a,n);
for(int i = 0; i<n; i++)
printf("%d",a[i]);
}
选择排序:
//选择排序法
#include<iostream>
using namespace std;
void selectsort(int a[],int n)
{
int min;
for(int i = 0; i < n; i++)
{
min = i;
for(int j = i; j < n; j++)
if(a[j]<a[min])
min = j;
int t = a[i];
a[i] = a[min];
a[min] = t;
}
}
int main()
{
int a[100],n;
scanf("%d",&n);
for(int i = 0; i < n; i++)
scanf("%d",&a[i]);
selectsort(a,n);
for(int i = 0; i < n; i++)
printf("%d ",a[i]);
}