用qsort排序



冒泡,快排都是常见的排序方法,这里介绍用头文件中的qsort函数排序。不过自己要先一个cmp函数。

#include<stdlib.h>//qsort的头文件
int a[100]={0,2,4,1,5,7,3,8,9}; //要排序的数组
struct Person//要排序的结构体
{
	char num[20];
	char name[100];
	int score;
	int sum;
}man[100];

1.给数组a[]排序

int cmp_1(const void *a,const void *b)//给数组a[]排序
{
	return *(int *)a-*(int *)b;
}

//函数的调用
qsort(a,N,sizeof(a[0]),cmp_1);//N为数组的大小,这里为9

2.按结构体里的 score排

int cmp_2(const void *a,const void *b)//按结构体里的 score排
{
	return ((Person *)a)->score-((Person *)b)->score;
}
//函数调用
qsort(man,N,sizeof(man[0]),cmp_2);

3.先按sum排,如果sum相等再按score排
int cmp_3(const void *a,const void *b)//先按sum排,如果sum相等再按score排
{
      struct Person *c=(Person *)a;
	  struct Person *d=(Person *)b;
	  if(c->sum!=d->sum)
	  return c->sum-d->sum;
	  else
	  return c->score-d->score;
}
//函数调用
qsort(man,N,sizeof(man[0]),cmp_3);

4.先按字符串num排,如果字符串num相同,再按字符串name排 
int cmp_4(const void *a,const void *b)//先按字符串num排,如果字符串num相同,再按字符串name排
{
     struct Person *c=(Person *)a;
  struct Person *d=(Person *)b;
  if(strcmp(c->num,d->num)!=0)
  return strcmp(c->num,d->num);
  else
  strcmp(c->name,d->name);
}
//函数调用
qsort(man,N,sizeof(man[0]),cmp_4); 

5.先按score排,如果score相同,再按字符串num排
<pre class="cpp" name="code">int cmp_5(const void *a,const void *b)//先按score排,如果score相同,再按字符串num排
{
      struct Person *c=(Person *)a;
	  struct Person *d=(Person *)b;
	  if(c->score!=d->score)
	  return c->score-d->score;
	  else
	  return strcmp(c->num,d->num);
}
//函数调用
qsort(man,N,sizeof(man[0]),cmp_5); 

用qsort排序,布布扣,bubuko.com

时间: 2024-09-27 04:33:39

用qsort排序的相关文章

qsort排序算法

七种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 

最易理解的qsort排序算法

快速排序算法程序可以写得千奇百怪,但最易理解的个人认为仍是下面的: #include<stdio.h> #include<time.h> #include<stdlib.h> void swap(int *a ,int *b) { int t = *a; *a = *b; *b = t; } int partition(int array[],int l,int r) { int pivot = array[r]; int curpos = l; int j ; for

qsort 排序功能 总结

qsort包括在<stdlib.h>头文件里.此函数依据你给的比較条件进行高速排序,通过指针移动实现排序. 排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比較函数. 函数原型: void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) ); 使用方法以及參数说明: Sorts the num elements of the arr

qsort 排序函數 总结

qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原型: void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) ); 用法以及参数说明: Sorts the num elements of the array

qsort排序的基本用法

#include<stdio.h> #include<stdlib.h>//qsort的头文件 int cmp(const void *a,const void *b) { return *(int *)a<*(int *)b; } int main() { int m[10],n; while(~scanf("%d",&n)) { for(int i=0;i<n;++i) scanf("%d",m+i); qsort(m

字符串数组qsort排序

#include <iostream> #include <stdlib.h> using namespace std; int cmp(const void * a,const void *b) //qsort库要求参数const { return strcmp((char *)a,(char *)b) ; //字典序从小到大 //return strcmp((char *)b,(char *)a) ; //字典序从大到小 } int main() { char s[3][4]=

C语言标准库函数qsort详解

1 函数简介 功 能: 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 2 基本用法 使用qsort()排序并用 bsearch()搜索是一个比较常用的组合,使用方便快捷. qsort 的函数原型是

STL笔记(6)标准库:标准库中的排序算法

STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew Austern http://www.cuj.com/experts/1908/austern.htm?topic=experts 用泛型算法进行排序    C++标准24章有一个小节叫“Sorting and related operations”.它包含了很多对已序区间进行的操作,和三个排序用泛型

qsort与sort

快排是我们平常敲代码和比赛的时候     经常使用到的方法 qsort是函数库中自带的函数    这是一个标准的快排函数 而sort比qsort更是好用    sort对于不同大小的数组   会使用不同的排序方法 所以我在使用sort之后   就没有使用过qsort了 我今天在这回顾一下qsort 和sort 的使用方法 qsort排序方法(升序) 一.对int类型数组排序 int num[10010]; int cmp ( const void *a , const void *b ) { r