首页 > 代码库 > sort函数

sort函数

sort函数:#include <algorithm>


默认从小到大,如果降序可写第三方函数进行排序,
EXP:sort(array,array+n,cmp)




①sort(数组首地址,首地址+排序个数)


第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。


也就是说,排序的区间是[a,b)。


简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。


②sort(数组首地址,首地址+排序个数,比较函数)


1.普通排序,升序
 #include<iostream>  
 #include<algorithm>  
 using namespace std;  
 int main()  
 {  
  int a[10]={7,3,4,6,5,1,2,9,8,0};  
  sort(a,a+10);  ///////////////此处数组范围必须用   a+10 的格式,不能用  sizeof(a)  
  for(int i=0;i<10;i++)  ///////也可以用 sort(a,a+sizeof(a)/4),此处相当于sort(a,a+10)
  cout<<a[i]<<" ";  
  return 0;  
 }  
 OUTPUT:0 1 2 3 4 5 6 7 8 9 
普通排序,降序
 #include <iostream>  
 #include <algorithm>  
 using namespace std;  
 bool cmp(int a,int b)  
 {  
  return a>b;  
 }  
 int main()  
 {  
  int a[10]={7,3,4,6,5,1,2,9,8,0};  
  sort(a,a+10,cmp);  
  for(int i=0;i<10;i++)  
  cout<<a[i]<<" ";  
  return 0;  
 }  
 OUTPUT:9 8 7 6 5 4 3 2 1 0 
2.结构体排序,a升,b降,c降
 #include <iostream>  
 #include <algorithm>  
 using namespace std;  
 struct data  
 {  
  int a;  
  int b;  
  int c;  
 };  
 bool cmp(data x,data y)  
 {  
  if(x.a!=y.a) return x.a<y.a;  
  if(x.b!=y.b) return x.b>y.b;  
  if(x.c!=y.c) return x.c>y.c;  
 }  
 int main()  
 {  
  .....  
  sort(array,array+n,cmp);  
  return 0;  
 } 




------------------------------------




普通排序例子:




#include<iostream>
#include<iomanip>
#include <stdio.h> 
#include<cstring>
#include <algorithm>
using namespace std;
int main()
{
freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取 
//freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中 




int a[10];
int i;
for(i=0;i<10;i++)
cin>>a[i];
sort(a,a+10);
//sort(a,a+sizeof(a)/4);//正确,同上
//sort(a,sizeof(a));//错误
for(i=0;i<10;i++)
cout<<a[i]<<‘ ‘;




fclose(stdin);//关闭文件 
//fclose(stdout);//关闭文件 
return 0;
}