学习笔记杂谈——c语言的快排函数qsort

前言

没想到吧,c语言也不用手写快速排序耶!因为今天我发现了一个非常全能的c语言库函数——qsort,它可以对任意类型的数据进行排序。emm至于为什么会发现的呢,这是因为这周有个只能用c语言写的比赛,发现自己好像脱离了c++的各种stl,各种库函数后,好像啥都不会,于是去看c的库。

头文件引入

好来,首先使用快排函数qsort,需要先引入头文件:include<stdlib.h>

函数用法分析

qsort(ElemType *s,count,sizeof(ElemType),cmp);

该函数需要引入4个参数。分别是待排序的数组s,待排序的元素个数count,数据类型长度(注意是字节为单位的)、以及排序的方式(需要自己写,而且有些特殊)

以题带入:小明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N1110001000之间的随机整数(�≤100N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入

10
20 40 32 67 40 20 89 300 400 15

输出

8
15 20 32 40 67 89 300 400
#include<stdio.h>
#include<stdlib.h>
const int N =100;
int a[N];
int cmp(const void* a,const void *b)  //看好排序函数怎么写的
{
    return *(int*)a-*(int*)b; //小到大
    // return *(int *b)-*(int*)a; //从大到小
    
}

int main()
{
    int n,cnt=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    qsort(a,n,sizeof(int),cmp);
    for(int i=0,j=1;i<n;i++,j++)
        if(a[i]==a[j]){a[i]=-1;cnt++;}
    
    printf("%d\n",n-cnt);
    for(int i=0;i<n;i++)
        if(a[i]!=-1)printf("%d ",a[i]);
        
    
return 0;    
}

接下来更新更多用法HH

double类型的排序

int cmp(const void * a, const void * b)
{
     return((*(double*)a - *(double*)b>0)?1:-1);
}

char类型的排序

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

甚至是struct类型的排序

struct Node
{
     int date;
     int n;
     
}stu[100];

int cmp(const void *a, const void *b)
{
     struct Node *p= (struct Node*)a;
     struct Node *q = (struct Node*)b;
     if(p->date != q->date)
         return(((p->date) > (q->date)) ? 1 : -1);
     else
         return((p->n) - (q->n));
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言数组排序函数qsort是标准库函数,用于对数组进行排序。它的使用方法是通过传入一个比较函数来指定排序的规则。在给出的代码中,我们可以看到使用qsort函数一个整型数组进行升序排序的例子。\[1\] 为了实现qsort函数的功能,我们可以使用一种较为简单的排序算法,比如冒泡排序算法来模拟实现一个具有排序数组、字符串、结构体等功能的bubble_sort函数。\[2\]这个函数的参数可以仿照qsort函数的参数,包括要排序的数组的起始地址、元素个数、每个元素的大小以及一个比较函数。\[3\] 具体实现bubble_sort函数函数体可以根据冒泡排序算法来编写,通过比较相邻的元素并交换位置来实现排序排序的规则可以通过比较函数来指定,根据需要可以实现升序或降序排序。 总结起来,qsortC语言标准库中的数组排序函数,可以通过传入比较函数来指定排序规则。如果想要模拟实现类似功能的排序函数,可以使用一种简单的排序算法,比如冒泡排序,并根据需要实现相应的比较函数。 #### 引用[.reference_title] - *1* *2* *3* [【C语言qsort()函数详解:能给万物排序的神奇函数](https://blog.csdn.net/weixin_72357342/article/details/130628874)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值