C语言qosrt()函数的使用对二维数组的排序和多维数组的排序 您所在的位置:网站首页 c语言数组大小排序 C语言qosrt()函数的使用对二维数组的排序和多维数组的排序

C语言qosrt()函数的使用对二维数组的排序和多维数组的排序

2024-06-29 21:12| 来源: 网络整理| 查看: 265

qsort()

qosrt()这个函数很有作用,可以用来排列一维的数组,还可以排列二维的数组等高纬度的数组。除此之外,还可以排列一部分的数组元素,qsort第一个参数是数组名,第二个参数是数组的长度,第三个参数是数组成员的大小,第四个参数是比较器。

一维数组 整形的一维数组

先来一份小代码

int cmp(const void *a, const void * b) { int c = *(int *)a; int d = *(int *)b; return c - d; } int main() { int i; int a[5] = {1,3,2,4,0}; qsort(a,5, sizeof(int), cmp); for (i = 0; i < 5; i++) printf("%d ",a[i]); } 结果 0 1 2 3 4

首先我们要理解cmp的含义,cmp是一个比较器,当我们cmp返回的是一个正数时,会进行交换,例如如果上述的代码中变量c是3 d是2,c - d是大于0的,所以a[1]与a[2]进行交换。

灵活的运用

我们可以通过过改变起始位置和数组的长度来改变排列的范围

#include #include #include int cmp(const void *a, const void * b) { int c = *(int *)a; int d = *(int *)b; return c - d; } int main() { int i; int a[5] = {1,3,2,4,0}; qsort(a+1,3, sizeof(int), cmp); //我们从a[1]开始,到a[4]结束,重点是不包括a[4] for (i = 0; i < 5; i++) printf("%d ",a[i]); } 结果 1 2 3 4 0 一维的字符数组

对于排列一维的字符数组也是一样的。因为字符的运算本质是阿斯卡码的运算。

#include #include #include int cmp(const void *a, const void * b) { char c = *(char *)a; char d = *(char *)b; return c - d; } int main() { int i; char a[5] = {'a','v','q','b','c'}; qsort(a,5, sizeof(char), cmp); for (i = 0; i < 5; i++) printf("%c ",a[i]); } 二维数组 整形的二维数组

先来一份小代码

int cmp(const void *a, const void * b) { int* c = *(int **)a; int* d = *(int **)b; return c[0] - d[0];//如果是第二个元素排序就是c[1]与d[1]l了 } int main() { int i, fi = 4; int** a = malloc(sizeof(int **) * 2); for(i = 0; i < 2; i++) a[i] = malloc(sizeof(int) * 2); for(i = 0; i < 2; i++) { a[i][0] = fi--; a[i][1] = fi--; } qsort(a,2, sizeof(int*), cmp); for (i = 0; i < 2; i++) printf("%d %d\n",a[i][0],a[1][1]); } 结果 2 3 4 3

请注意这个直接开一个二维数组是,在使用qsort()有问题的原因不知道,知道的大佬可以说一下。这里是通第一个元素从小到大的排序。

###字符的二维数组 来一份代码

#include #include #include #include int cmp(const void *a, const void * b) { char* c = *(char **)a; char* d = *(char **)b; return strcmp(c,d); } int main() { int i; char fi = 'z'; char** a = malloc(sizeof(char **) * 2); for(i = 0; i < 2; i++) a[i] = malloc(sizeof(char) * 2); for(i = 0; i < 2; i++) { a[i][0] = fi--; a[i][1] = fi--; } qsort(a,2, sizeof(char*), cmp); for (i = 0; i < 2; i++) printf("%c %c\n",a[i][0],a[1][1]); }

注意cmp在这cmp中,使用的是strcmp(),看可以通过它,进行字典序的排序,从而达到对二位数组的排序,strcmp详细的用法可以百度一下。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有