C语言实现快速排序的函数qsort

在牛客网刷题遇到一个题目,看了很长时间不会写,本来想暴力26个字母一个一个字母对比,发现肯定超时,冒泡又太麻烦,快排自己写交换函数又有难度,在别人提交的代码中发现了一位大神,用了qsort函数,查了一下发现它就是C语言用来实现快速排序的

函数原型为:

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

参数

  • base -- 指向要排序的数组的第一个元素的指针。
  • nitems -- 由 base 指向的数组中元素的个数。
  • size -- 数组中每个元素的大小,以字节为单位。
  • compar -- 用来比较两个元素的函数。

返回值

该函数不返回任何值

用法:

实现输出按字符顺序升序排序后的字符串

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare(const void *a,const void *b){
    return (*(char *)a- *(char *)b);
}
int main(){
    char str[200];
    scanf("%s",str);
    qsort(str,strlen(str),1,compare);
    printf("%s",str);
    return 0;
}

注:在菜鸟看到一位大神写的评论关于compare函数:

compar 参数指向一个比较两个元素的函数。比较函数的原型应该像下面这样。注意两个形参必须是 const void * 型,同时在调用 compar 函数(compar 实质为函数指针,这里称它所指向的函数也为 compar)时,传入的实参也必须转换成const void * 型。在 compar 函数内部会将 const void * 型转换成实际类型,见下文。

int compar(const void *p1, const void *p2);

如果 compar 返回值小于 0(< 0),那么 p1 所指向元素会被排在p2所指向元素的前面如果 compar 返回值等于 0(= 0),那么 p1 所指向元素与 p2 所指向元素的顺序不确定如果 compar 返回值大于 0(> 0),那么 p1 所指向元素会被排在 p2 所指向元素的后面。

所以,若把代码compare函数中return语句改成:return (*(char *)b- *(char *)a);则会实现降序排序

猜你喜欢

转载自blog.csdn.net/sinat_41720492/article/details/105545853