库函数qsort使用示范

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4
  5 struct Struction
  6 {
  7     double one;
  8     int another;
  9 };
 10
 11 int CmpInt_1(const void *a,const void *b)
 12 {
 13     return *(int*)a - *(int*)b;
 14 }
 15
 16 int CmpInt_2(const void *a,const void *b)
 17 {
 18     int *c = (int *)a;
 19     int *d = (int *)b;
 20
 21     if(*(c+0) != *(d+0))
 22     {
 23         return *(c+0) - *(d+0);
 24     }
 25     else
 26     {
 27         return *(c+1) - *(d+1);
 28     }
 29 }
 30
 31 int CmpStruction(const void *a,const void *b)
 32 {
 33     struct Struction *c = (struct Struction *)a;
 34     struct Struction *d = (struct Struction *)b;
 35
 36     if(c->one != d->one)
 37     {
 38         return  c->one > d-> one ? 1 : 0;
 39     }
 40     else
 41     {
 42         return c->another > d-> another ? 1 : 0;
 43     }
 44 }
 45
 46 int CmpString(const void *a,const void *b)
 47 {
 48     return strcmp((char*)a,(char*)b);
 49 }
 50
 51 int main()
 52 {
 53     int i,j;
 54
 55     //sort int*
 56     int TestArray_1[10] = {718,224,3332,4443,55,31,66,79,90,7};
 57     qsort(TestArray_1,10,sizeof(int),CmpInt_1);
 58
 59     for(i = 0; i < 10; i ++)
 60     {
 61         printf("%d ",TestArray_1[i]);
 62     }
 63     printf("\n\n");
 64
 65
 66     //sort int**
 67     int TestArray_2[5][2] = {{0,1},{2,7},{-4,99},{1,900},{2,423}};
 68     qsort(TestArray_2,5,sizeof(TestArray_2[0]),CmpInt_2);
 69
 70     for(i = 0; i < 5; i ++)
 71     {
 72         for(j = 0; j < 2; j ++)
 73         {
 74             printf("%d ",TestArray_2[i][j]);
 75         }
 76         printf("\n");
 77     }
 78     printf("\n\n");
 79
 80     //sort struct with two variable
 81     struct Struction *TestArray_3 = malloc(5*sizeof(struct Struction));
 82     TestArray_3[0].one = 1.1;
 83     TestArray_3[0].another = 18;
 84     TestArray_3[1].one = 43;
 85     TestArray_3[1].another = -99;
 86     TestArray_3[2].one = 1.1;
 87     TestArray_3[2].another = 900;
 88     TestArray_3[3].one = 3;
 89     TestArray_3[3].another = 6;
 90     TestArray_3[4].one = 2;
 91     TestArray_3[4].another = 4;
 92
 93     qsort(TestArray_3,5,sizeof(struct Struction),CmpStruction);
 94     for(i = 0; i < 5; i ++)
 95     {
 96         printf("%lf %d\n",TestArray_3[i].one,TestArray_3[i].another);
 97     }
 98     printf("\n\n");
 99
100     //sort string
101     char TestArray_4[5][100];
102     strcpy(TestArray_4[0],"Asurudo");
103     strcpy(TestArray_4[1],"Lokianyu");
104     strcpy(TestArray_4[2],"Hatsune");
105     strcpy(TestArray_4[3],"Miku");
106     strcpy(TestArray_4[4],"Aqours");
107
108     qsort(TestArray_4,5,sizeof(TestArray_4[0]),CmpString);
109     for(i = 0;i < 5;i ++)
110     {
111         puts(TestArray_4[i]);
112     }
113
114     return 0;
115 }

原文地址:https://www.cnblogs.com/Asurudo/p/9427430.html

时间: 2024-10-20 23:07:53

库函数qsort使用示范的相关文章

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 的函数原型是

C语言的比较库函数--qsort

c语言中的库函数:qsort(int *base,int num,int width,int (*compare)(int *void,int *void)): 其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数. 比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名. qsort(a,1000,sizeof(in

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

C语言qsort

C/C++中有一个快速排序的标准库函数 qsort ,在stdlib.h 中声明,其原型为: void qsort(void *base, int nelem, unsigned int width, int ( * pfCompare)( const void *, const void *)); 使用该函数,可以对任何类型的一维数组排序.该函数参数中,base 是待排序数组的起始地址,nelem 是待排序数组的元素个数,width 是待排序数组的每个元素的大小(以字节为单位),最后一个参数

自己写快排模板与C++快排库函数使用

自己写快排模板与C++快排库函数使用 1.自己写快排模板 我理解的快速排序思想原理是: 假定待排序数组的范围是0~N 1.在一个数组中找一个数作为中心点M(可以使用固定位置的数,也可以随机的采用数组中的数) 2.把数组中所有的数与这个中心点进行比较.小于中心点的数移到中心点左边,大于中心点的数移到中心点右边. 3.经过上面两步可以得到由M点所划分的两个数组(一个数组都小于等于M,一个都大于等于M),再对这两个数组递归的进行1.2所示步骤,知道划分的数组大小为0: 快排思想实现的主要的重点难点在于

最小生成树之克鲁斯卡尔(Kruskal)算法

学习最小生成树算法之前我们先来了解下 下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树. 生成树是连通图的极小连通子图.这里所谓极小是指:若在树中任意增加一条边,则将出现一条回路:若去掉一条边,将会使之变成非连通图. 最小生成树(Minimum Spanning Tree,MST):或者称为最小代价树Minimum-cost Spanning Tr

数据结构--图(中)--树之习题选讲Complete Binary Search Tree

Complete Binary Search Tree 完全 二叉 搜索数 题意理解 二叉搜索数 左小右大 完全二叉树 结构规律 完全二叉搜索数 到底用什么数据结构来表示这个树呢?链表还是数组. 1.由于是完全二叉树,所以我们能准确的算出来左子树有多少个结点.   完全二叉树+n个树 -> 左子树的个数 2.左子树的个数能推出根节点的大小,左子树4个,那么根节点一定是第5位数 左子树的个数->根节点的值 3.这个思维:当我们确定了根节点之后,我们可以很容易的通过递归来确定其他的结点      

bsearch

C语言中 bsearch 包含在<stdlib.h>头文件中,此函数可以根据你给的条件实现二分查找,如果找到元素则返回指向该元素的指针,否则返回NULL:对于有多个元素匹配成功的情况,bsearch()未定义返回哪一个.使用 bsearch 函数也要自己定义比较子函数. 函数原型 void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*cmp)(const void *,const void

第一章 C/C++语言概述 【代码手输一遍】

前情提要:如果不涉及面向对象的部分,那么C++语言和C语言的语法90%以上是一样的,只不过略有扩充,用起来更为方便而已. 查看gcc版本: E:\Program Files\MinGW\bin>gcc -v Reading specs from ./../lib/gcc/mingw32/3.4.5/specs Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi th-gnu-as --h