首页 > 其他分享 >qsort

qsort

时间:2023-11-09 19:13:53浏览次数:31  
标签:const int void qsort 排序 cmp

qsort快速排序和sizeof运算符

一.qsort快速排序

对于C语言中排序,冒泡排序是一种普遍常用的方法,但冒泡排序在绝大多数情况下只被用来整形排序,但在结构体等内容中我们常用到char,float,double等非整形数据,此时,qsort快速排序不失为一个很好的选择。

1.头文件

   #include<stdlib.h>

Git Bush

2.qsort函数的格式

Git Bush
根据官方网站,qsort传值由四部分构成
a.void* base
第一个参数是一个指针,通常指向需要排序的数组(可用数组名代替)或对象
b.size_z num
第二个参数是一个整形数字,表示需要排序的对象元素个数。
c.size_size
第三个参数为元素的大小(具体格式详见 二.sizeof)
d.int (compar)(const void,const void*)
第四个参数是一个函数指针,指向实现排序的函数。(可用函数名代替)

3.cmp函数

qsort快速排序需要一个函数实现为qsort返回值。
常为

   int cmp(const void* e1,const void*e2)//设成空指针,方便接受不同类型变量的地址。
   {
      return (int*)e1-(int*)e2;//强制类型转换,取决于需要排序的变量类型
   }

若返回值不是整形,则要多加一个强制类型转化,将返回值转化为整形,

   int cmp(const void* e1,const void*e2)
   {
      return (int)(double*)e1-(double*)e2);
   }

根据C语言对真假的处理,qsort快速排序默认升序,若要降序排列,可以改变返回值。

   int cmp(const void* e1,const void*e2)
   {
      return (int*)e2-(int*)e1;
   }

或自定义返回值

   int cmp(const void* e1, const void* e2)//升序
  {
	  int* p1 = (int*)e1;//也可定义新的整形变量存放强制类型转化后的空指针。
	  int* p2 = (int*)e2;
	  if (*p1 > *p2)
	  {
		  return 1;
	  }
	  else if (*p1 == *p2)
	  {
		  return 0;
	  }
	  else if (*p1 < *p2)
	  {
		return -1;
	  }
  }

二.sizeof(针对qsort)

在qsort传值时,第三个参数为排序对象的大小。下列几种格式。

1.sizeof(变量类型)

例如sizeof(int)

2.sizeof(变量名)

在某些排序中,变量类型为结构体变量等,无法使用第一种方法。此时我们可以使用sizeof(变量名)。

typedef struct Stu
{
   int num;
   int score;
   int math;
   int eng;
   int C;
}Stu;
int main()
{
   qsort(list, n, sizeof(Stu), cmp);
   return 0;
}

3.字节数

此处变量大小也可以写成字节数。

qsort(list, n, 4, cmp);//int
qsort(list, n, 1, cmp);//char

总而言之,qsort快速排序相比于冒泡排序更加全面广泛,但理解和操作起来较困难,可在编写程序时合理选择。

标签:const,int,void,qsort,排序,cmp
From: https://www.cnblogs.com/qdgy----/p/17822563.html

相关文章

  • qsort函数
    (目录)1.什么是qsort函数我们以前学习过的一些排序算法,如冒泡、希尔、快排等等,它们速度有快有满,但是这些排序都只能排序一种类型的变量,如果想排序另一种变量就需要另写一个排序,那么有没有什么排序是“万能的”呢,什么类型数据都能排的呢?答案就是qsort函数qsort函数实现了一种......
  • c语言 qsort函数的使用
    #include<iostream>#include<stdio.h>voidprinfArray(int*nums,intsize){for(inti=0;i<size;i++){printf("%d",nums[i]);}printf("\n");}intcompare(voidconst*a,voidconst*......
  • qsort排序的用法
    //voidBubble_sort(intarr[],intsz)//{// inti=0;// for(i=0;i<sz-1;i++)//确定排序执行的次数// {// intj=0;// for(j=0;j<sz-1-i;j++)//确定每次排序两组元素的对比次数// {// inttmp=0;// if(arr[j]>arr[j+1])// {// tmp=......
  • C语言—模范qsort()实现一个冒泡排序的通用算法
    目录一、库方法qsort参数解释二、冒泡排序解释三、模拟实现1、冒泡排序函数2、数值交换函数3、测试函数4、运行结果5、源代码一、库方法qsort参数解释二、冒泡排序解释三、......
  • 万能的排序“qsort”
    今日份学习“qsort”函数前言:针对一个数组的元素进行排序,我们可以想到冒泡排序法,且如果将该排序法专门写入一个函数,需排序的数组调入其中是不是方便很多呢?且如果要实现这样......
  • 用冒泡排序模拟qsort的实现
    #include<stdio.h>#include<stdlib.h>#include<string.h>//交换voidswap(char*arr1,char*arr2,intwidth){inti=0;for(i=0;i<width;i++){chararr......
  • qsort的使用方式示例
    (数组首元素地址,数组元素个数,数组中每个元素的大小,函数指针-比较两个元素所用函数的地址)#include<stdio.h>#include<stdlib.h>#include<string.h>//结构体structstu{char......
  • qsort的模拟实现与思路
    这是一篇介绍qsort函数模拟实现的博客,包含每一步实现的思路,对MSDN中qsort的使用进行了详细介绍。在实现的过程中,也对涉及到的知识点进行了一些简单介绍。希望可以给同为计......
  • 使用qsort函数实现冒泡排序(函数指针的运用)
    //此程序的本质:完全理解qsort函数的传参的原则////实现思路:因为我们是模拟qsort函数//所以我们要自己创造一个:比较数据的函数:cmp_int//因此必须有一个函数指针来接收这......
  • 回调函数和如何使用qsort函数以及最后如何运用冒泡排序完成一个各类型数据都适用的排
    首先回调函数就是通过一个函数指针调用的函数。简言之就是如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这就是回调函数。回调......