///快速排序模板///
//转载编程学习笔记的博客,源地址请点击,感谢”编程学习笔记“博主的辛勤付出。
//部分验证,推理得出。内容基本可靠!
对int/char/float/double整形数组的快排/
#include <stdio.h>
#include<stdlib.h>
int cmp(const void *p,const void *q)//该函数进行的是升序快排,如果想要进行降序快排,则将1和-1调换即可
{
return *(元素类型 *)p>*(元素类型 *)q?1:-1;//根据元素的值进行排序
}
int main()
{
元素类型 str[V]; //V为数组大小
qsort(str, cnt, sizeof(num[0]), cmp);//对元素类型型数组str[ ]进行快排//cnt为要排的元素的个数
}
///
///对结构体某元素的快排
#include <stdio.h>
#include<stdlib.h>
int cmp(const void *p, const void *q);//声明函数
struct ln
{
int data;
int score;
int math;
}ss[V];//V为数组大小
int main()
{
qsort(ss, cnt sizeof(struct ln), cmp);//对结构体ss进行快排//cnt为要排的元素的个数
}
int cmp(const void *p,const void *q)//该函数进行的是升序快排,如果想要进行降序快排,则将1和-1调换即可
{
return (*(struct ln*)p).data>(*(struct ln*)q).data?1:-1;//根据结构体中data的值进行排序
}//一级结构体排序
int cmp(const void *p,const void *q)//该函数进行的是升序快排,如果想要进行降序快排,则将1和-1调换即可
{
if((*(struct ln*)p).data==(*(struct ln*)q).data)//结构体中data的值相等
return (*(struct ln*)p).score>(*(struct ln*)q).score?1:-1;//根据结构体中score的值进行排序
else
return (*(struct ln*)p).data>(*(struct ln*)q).data?1:-1;//根据结构体中data的值进行排序
}//二级结构体排序
//多级结构体以此类推
///
//对结构体重字符串的快排///
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
struct ln
{
int data;
char ch[v];//v为数组大小
}ss[V];//V为数组大小
int cmp(const void *p,const void *q)
{
return strcmp((*(struct ln*)p).ch,(*(struct ln*)q).ch );
}
int main()
{
qsort(ss,cnt,sizeof(ss[0]),cmp);//对结构体ss按照结构体中字符串ch的字典顺序进行快排//cnt为要排的元素的个数
}
///
//注意事项/
1.根据实际操作发现qsort在排非常大(或非常小)的数(如<limits.h>中的INT_MAX(INT_MIN))时会失灵(不排这个数),原因暂不明,使用时要注意!
2.使用qsort应用.c编辑,不可用.cpp!