C语言qsort C++的sort

来源:互联网 发布:华为没有网络怎么回事 编辑:程序博客网 时间:2024/06/10 07:56

C++:

要使用此函数只需用#include <algorithm> sort即可使用,默认是升序;语法描述为:
sort(begin,end),表示一个范围,例如:

int _tmain(int argc, _TCHAR* argv[])
{
 int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 for(i=0;i<20;i++)
  cout<<a[i]<<endl;
 sort(a,a+20);
 for(i=0;i<20;i++)
 cout<<a[i]<<endl;
 return 0;
}
输出结果将是把数组a按升序排序,说到这里可能就有人会问怎么样用它降序排列呢?这就是下一个讨论的内容.
一种是自己编写一个比较函数来实现,接着调用三个参数的sort:sort(begin,end,compare)就成了。对于list容器,这个方法也适用,把compare作为sort的参数就可以了,即:sort(compare).

1)自己编写compare函数:
bool compare(int a,int b)
{
  return a<b; //升序排列,如果改为return a>b,则为降序
}
int _tmain(int argc, _TCHAR* argv[])
{
  int a[20]={2,4,1,23,5,76,0,43,24,65},i;
  for(i=0;i<20;i++)
  cout<<a[i]<<endl;
  sort(a,a+20,compare);
  for(i=0;i<20;i++)
  cout<<a[i]<<endl;
  return 0;
}

struct node{
    int a;
    int b;
    double c;
}
   有一个node类型的数组node arr[100],想对它进行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b还相同,就按c降序排列。就可以写这样一个比较函数:

以下是代码片段:
bool cmp(node x,node y)
{
     if(x.a!=y.a) return x.a

if(x.b!=y.b) return x.b>y.b;
     return return x.c>y.c;
    排序时写sort(arr,a+100,cmp);

qsort(s[0],n,sizeof(s[0]),cmp);


C:

C语言中没有预置的sort函数。如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。

一、可以编写自己的sort函数。

如下函数为将整型数组从小到大排序。

void sort(int *a, int l)//a为数组地址,l为数组长度。{    int i, j;    int v;    //排序主体    for(i = 0; i < l - 1; i ++)        for(j = i+1; j < l; j ++)        {            if(a[i] > a[j])//如前面的比后面的大,则交换。            {                v = a[i];                a[i] = a[j];                a[j] = v;            }        }}

对于这样的自定义sort函数,可以按照定义的规范来调用。


二、C语言有自有的qsort函数。

功 能: 使用快速排序例程进行排序

头文件:stdlib.h

原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

参数:

1 待排序数组首地址

2 数组中待排序元素数量

3 各元素的占用空间大小

4 指向函数的指针,用于确定排序的顺序

这个函数必须要自己写比较函数,即使要排序的元素是int,float一类的C语言基础类型。

以下是qsort的一个例子:

一、对int类型数组排序  

int num[100];  

Sample:  

int cmp ( const void *a , const void *b )  
 
return *(int *)a - *(int *)b;  
 

qsort(num,100,sizeof(num[0]),cmp);  

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

char word[100];  

Sample:  

int cmp( const void *a , const void *b )  
 
return *(char *)a - *(int *)b;  
 

qsort(word,100,sizeof(word[0]),cmp);  

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

double in[100];  

int cmp( const void *a , const void *b )  
 
return *(double *)a > *(double *)b ? 1 : -1;  
}


#include<stdio.h>#include<stdlib.h>int comp(const void*a,const void*b)//用来做比较的函数。{    return *(int*)a-*(int*)b;}int main(){    int a[10] = {2,4,1,5,5,3,7,4,1,5};//乱序的数组。    int i;    qsort(a,n,sizeof(int),comp);//调用qsort排序    for(i=0;i<10;i++)//输出排序后的数组    {        printf("%d\t",array[i]);    }    return 0;}
1 0
原创粉丝点击