/*qsort排序
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int cmp(const void* a,const void* b);
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
int cmp(const void* a,const void* b)
{
return *(int*)a-*(int*)b;//int 类型 如果返回是正数就交换位置,如果是负数或者是0就不交换位置 如果是a-b则是从小到大输出,否则是从大到小输出
//return *(double*)a-*(double*)b;//double类型
//return *(char*)a-*(char*)b;//char类型
}*/
/*结构体类型的多级排序
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int grade;
int chinese;
}s[5];
int main()
{
int i;
for(i=0;i<5;i++)
scanf("%d%d",&s[i].grade,&s[i].chinese);
int cmp(const void* a,const void* b);
qsort(s,5,sizeof(s[0]),cmp);
for(i=0;i<5;i++)
printf("%d %d\n",s[i]);
return 0;
}
int cmp(const void* a,const void* b)
{
Node* c=(Node*)a;//强制转换为结构体类型
Node* d=(Node*)b;
if(c->grade!=d->grade)
return c->grade-d->grade;//如果成绩不相等,则按成绩大小排列,如果相等则按语文科目成绩排列 c-d是按由小到大排列,反之是由大到小
else
return c->chinese-d->chinese;
}
*/
/*sort排序
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int i,a[100];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);//起始的排序范围
for(i=0;i<n;i++)
printf("%d ",a[i]);//这是从小到大排列的,如果想从大到小可以让数组到这输出
printf("\n");
return 0;
}*/
//同是降序,sort的comp函数是a>b而qsort的函数是return b-a;
/*sort 使用时得注明:using namespace std; 或直接打 std::sort() 还得加上 #include <algorithm>
例:
*/
#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
int a[20];
for(int i=0;i<20;++i)
scanf("%d",&a[i]);
sort(a,a+20); //范围,很明显这里是a+20 注意,这是必要的,如果是a+19
for(i=0;i<20;i++) //最后一个值a[19]就不会参与排序。
printf("%d ",a[i]);
printf("\n");
return 0;
}
qsort,sort排序
最新推荐文章于 2022-08-15 20:34:01 发布