C语言快速排序函数qsort()

qsort函数是C语言编译器函数库自带的快速排序函数

头文件:#include<stdlib.h>
函数原型:

void qsort(
    void *base,
    size_t nmemb,
    size_t size,
    int (*compar)(const void *, const void *)
    );

参数介绍:

参数base :
指向需要排序元素的起始地址

参数nmemb:
表示起始地址后需要排序元素的个数

参数size:
表示该数组中每个元素的大小(字节数),通常sizeof(int)

参数(*compar)(const void *, const void *) :
为指向比较函数的函数指针,决定了排序的顺序。(默认从小到大)

用法示例

输入:
第一行输入一个n表示元素的个数
第二行输入n个数,用空隔开

输出:输出n个数从小到大排序的结果

#include <stdio.h>
#include <stdlib.h>
int a[10005];
int cmp(const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	scanf("%d",&a[i]);
   qsort(a,n, sizeof(int), cmp);
   for( int i= 0;i < n; i++ ) {
      printf("%d ",a[i]);
   }
  return 0;
}

运行结果:
在这里插入图片描述

函数默认从小到大排序,如果要求从大到小怎么办???
做法:
只需将cmp函数返回值取反即可

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

运行结果:
在这里插入图片描述

不仅如此起始sqort()还可以直接在选定的区间以内排序

比如我们实现将a[1]~a[9]之间的元素从小到大排序,只需将qsort()改为

 qsort(a+1,n-2, sizeof(int), cmp);

运行结果:
在这里插入图片描述

qsort 也适用浮点型数据

#include <stdio.h>
#include <stdlib.h>
float a[10005];
int cmp(const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	scanf("%f",&a[i]);
   qsort(a,n, sizeof(float), cmp);
   for( int i= 0;i < n; i++ ) {
      printf("%f ",a[i]);
   }
  return 0;
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值