快速排序
头文件:#include<stdlib.h>
函数:qsort(首地址,数目,单个元素字节大小,方法(升序/降序));
实例
//【数组】
#include<iostream>
#include<stdlib.h>
using namespace std;
int order(const void *a,const void *b)
{
return *(int*)a - *(int*)b; //升序
}
int reorder(const void *a,const void *b)
{
return *(int *)b - *(int *)a; //降序
}
void main()
{
int s[8]={2,5,3,4,8,6,3,4};
qsort(s,8,sizeof(s[0]),order);
for(int i=0;i<8;i++)
{
cout<<s[i]<<' ';
}
}
/*
运行结果:
2 3 3 4 4 5 6 8
*/
//【字符】
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int order(const void *a,const void *b)
{
return *(char *)a - *(char *)b; //升序
}
int reorder(const void *a,const void *b)
{
return *(char *)b - *(char *)a; //降序
}
void main()
{
char s[9]="dsfgkide";
qsort(s,strlen(s),sizeof(s[0]),order);
cout<<s<<endl;
}
/*
运行结果:
ddefgiks
*/
//【字符串】
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int order(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b); //升序
}
int reorder(const void *a,const void *b)
{
return strcmp((char*)b,(char*)a); //降序
}
void main()
{
char s[][12]={"sky is grey","cold","nisjid","i jidu"};
qsort(s,4,sizeof(s[0]),order);
for(int i=0;i<4;i++)
cout<<s[i]<<endl;
}
/*
运行结果:
cold
i jidu
nisjid
sky is grey
*/
//【结构体】
#include<iostream>
#include<stdlib.h>
using namespace std;
struct student
{
int a;
char b;
}stu[5]={{5,'e'},{1,'a'},{2,'b'},{4,'d'},{3,'c'}};
int order(const void *a,const void *b)
{
return ((struct student*)a)->a - ((struct student*)b)->a; //升序
}
int reorder(const void *a,const void *b)
{
return ((struct student*)b)->a - ((struct student*)a)->a; //降序
}
void main()
{
qsort(stu,5,sizeof(stu[0]),order);
for(int i=0;i<5;i++)
cout<<stu[i].a<<' '<<stu[i].b<<endl;
}
/*
运行结果:
1 a
2 b
3 c
4 d
5 e
*/
const void*是一个空型指针,在使用的过程中,都是通过强制转换成实际的数据类型。