1.sort();
最简单实用方便的排序。
直接实用即可,但必须有头文件;
#include<algorithm>
using namespace std;
(1)直接对一维数组排序。
int a[100];//你要排序的数组
int n;//数组内元素的个数;
sort(a,a+n);//默认是从小到大排序
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[100];
bool cmp(int x,int y)//外部函数,“>”是从大到小排序,“<”是从小到大排序;
{
return x>y;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);//这里是从大到小排序;
for(int i=0; i<n; i++)
printf("%d ",a[i]);
return 0;
}
(2)对结构体排序;
依照结构体中的某个元素(或多个元素)排序;
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
int x,y;
} dis[100];
bool cmp(node a,node b)
{
if(a.x==b.x)//如 果a,b的x元素相等,那么就以y元素为准;
return a.y>b.y;
return a.x>b.x;//否则以x元素为准;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d%d",&dis[i].x,&dis[i].y);
sort(dis,dis+n,cmp);
for(int i=0; i<n; i++)
printf("%d %d\n",dis[i].x,dis[i].y);
return 0;
}
2.冒泡排序
#include<stdio.h>
int a[1000];
int main()
{
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])//从小到大排序,换为“<”就是从大到小排序
{
int f=a[j];
a[j]=a[j+1];
a[j+1]=f;
}
}
}
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
3.快速排序
#include<stdio.h>
#include<string.h>
int a[1000];
void kuaisort(int l,int r)//以从小到大排序为例,从大到小类似;
{
if(l>r)
return ;
int temp=a[l];//以在a[l]为基数
int i=l,j=r;
while(i!=j)//直到i和j相同
{
//找出右边小于a[l](即temp)的数;
while(temp<=a[j]&&i<j)//一定要先找左边最大的,好好想想
j--;
//找出左边大于a[l](即temp)的数;
while(temp>=a[i]&&i<j)
i++;
if(i<j)//如果找到,进行交换
{
int f=a[i];
a[i]=a[j];
a[j]=f;
}
}
a[l]=a[i];//将基数(a[l])与最终找到的a[i]交换;
a[i]=temp;
//这样【l,i-1】的数都是小于等于temp的数,【i+1,r】的数都是大于等于temp的数
kuaisort(l,i-1);//将左边进行类似排序
kuaisort(i+1,r);//将右边进行类似排序
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
kuaisort(0,n-1);
for(int i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
}
return 0;
}