sort函数  排序 头文件  #include<algorithm>

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp1(int a,int b)
{return a>b;}//升序排列
bool cmp2(int a,int b)
{return a<b;}//降序排列
int main()
{
 int n,i,s[100];
 while(scanf("%d",&n)!=EOF)
 {
  for(i=0;i<n;i++)
   scanf("%d",&s[i]);
  sort(s,s+n,cmp1);
  for(i=0;i<n;i++)
   printf("%d   ",s[i]);
  printf("\n");
  sort(s,s+n,cmp2);
  for(i=0;i<n;i++)
   printf("%d   ",s[i]);printf("\n");
 }
 return 0;
}

 #include<iostream>
#include<algorithm>
using namespace std;
bool cmp1(char a,char b)
{
 return a>b; //升序排列
}
bool cmp2(char a,char b)
{
 return a<b;  //降序排列
}
int main()
{
 int n,i;
 char s[100];
 while(scanf("%d",&n)!=EOF)
 {
  getchar();
  for(i=0;i<n;i++)
   scanf("%c",&s[i]);
  sort(s,s+n,cmp1);
  for(i=0;i<n;i++)
   printf("%c  ",s[i]);
  printf("\n");
  sort(s,s+n,cmp2); 
  for(i=0;i<n;i++)
   printf("%c  ",s[i]);printf("\n");
 }
 return 0;
}

C++里实现对string数组的排序
方法一:(string本身就是个容器)
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void main()
{
 string strArray[2] = { "hello", "abc" };
 sort(strArray, strArray+2); // 排序的起始地址和结束地址后一位
 for (int i = 0; i < 2; i++)
 {
  cout << strArray[i] << endl;
 }
}
方法二:将字符串都放在vector里
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int main()
{
 vector<string> strArray ;
 string str[4] = {"hello, world!", "welcome to cpp.", "effective c++", "exceptional c++"};
 
 for(int i = 0; i<4; i++)
         strArray.push_back(str[i]);  //依次存入vector strArray
 sort(strArray.begin(), strArray.end());
 
 vector<string>::iterator st;
 for(st = strArray.begin(); st != strArray.end(); st++)
        cout<<*st<<endl;    //用iterator实现,也可用cout<<strArray.at(i)实现
       
 system("pause");
 return 0;
}

 

 

qort函数

#include<iostream>
#include<algorithm>
using namespace std;
int compare(const void *a,const void *b)
{
     return *(int*)b-*(int*)a;  
}

int main()
{
     int a[20]={2,4,1,23,5,76,0,43,24,65},i;
     for(i=0;i<10;i++)
        cout<<a[i];

     cout<<endl;
     qsort((void *)a,10,sizeof(int),compare);
     for(i=0;i<10;i++)
        cout<<a[i];

     cout<<endl;
     return 0;
}

 

qort函数对字符串排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char s[100][100];
int i,n;
int cmp(const void *a,const void *b)
{
     return(strcmp((char*)a,(char*)b));
}
int main()
{
 while(scanf("%d",&n))
 {
  for(i=0;i<n;i++)
   scanf("%s",s[i]);
  qsort(s,n,sizeof(s[0]),cmp);
  for(i=0;i<n;i++)
   printf("%s\n",s[i]);
 }
 return(0);
}

 

 

一、对int类型数组排序

Sample:
#include<stdio.h>
#include<stdlib.h>
int cmp ( const void *a , const void *b )
{
 return *(int *)a - *(int *)b;  //强制转换类型
}
int main()
{
 int n,i,s[100];
 while(scanf("%d",&n)!=EOF)
 {
  for(i=0;i<n;i++)
   scanf("%d",&s[i]);
  qsort(s,n,sizeof(s[0]),cmp);
  for(i=0;i<n;i++)
   printf("%d   ",s[i]);
 }
 return 0;
}

二、对char类型数组排序(同int类型)

//Sample:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp( const void *a , const void *b )
{
 return *(char *)a - *(char *)b;
}
int main()
{
 int n,i;
 char word[100];
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  scanf("%s",word);
  int t=strlen(word);
  qsort(word,t,sizeof(word[0]),cmp);
  printf("%s\n",word);
 }
 return 0;
}

 

三、对double类型数组排序(特别要注意)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp( const void *a , const void *b )
{
 return *(double *)a > *(double *)b ? 1 : -1;
}
int main()
{
 double in[100];
 int i,n;
 while(scanf("%d",&n)!=EOF)
 {
  for(i=0;i<n;i++)
   scanf("%lf",&in[i]);
  qsort(in,n,sizeof(in[0]),cmp);
  for(i=0;i<n;i++)
   printf("%.1lf ",in[i]);
  printf("\n");
 }
 return 0;
}

posted on 2011-05-16 21:37  pcoda  阅读(447)  评论(0编辑  收藏  举报