//qsort
#include <stdio.h>
#include <stdlib.h>
#define maxSize 10
/*
int cmp(const void *a,const void *b){
int L = *((int *)a);
int R = *((int *)b);
if(L>R) return 1;
else if(L==R) return 0;
else return -1;
//return *((int *)a) - *((int *)b);
//有正数 负数 0 之分即可
//对int类型数组排序
//对double类型数组排序 把int变为float即可 不能直接相减
}
int main(){
int arr[10] = {1,2,0,-1,3,-9,12,1,2,10},n=10;
qsort(arr,n,sizeof(arr[0]),cmp);//从小到大排序
for(int i=0;i<n;++i) printf("%d ",arr[i]);
return 0;
}
*/
/**
* 排序问题
* void qsort(基地址,元素个数,元素大小,比较函数);
* int compare(当前比较元素1地址,当前比较元素2地址);
* 对char类型数组排序(同int类型)
*
*/
/*
int cmp(const void *a,const void *b){
return *((char*)a) - *((char*)b);
}
int main(){
char s[] = "sjdhbfxvbc";
int n=10;
qsort(s,n,sizeof(s[0]),cmp);
puts(s);//bbcdfhjsvx
return 0;
}
*/
//对二维char类型数组排序
/*
#include <string.h>
int cmp(const void *a,const void *b){
char *L = *((char**)a);
char *R = *((char**)b);
return strcmp(L,R);
}
int main(){
char *words[10] = {
"welcome","to","the","new","world"
};
int n = 5;
qsort(words,n,sizeof(char*),cmp);
for(int i=0;i<5;++i) puts(words[i]);
return 0;
}
*/
//对结构体数组的排序
typedef struct structTest{
int a;
int b;
}structTest;
//依照a分量进行排序
/*
int cmp(const void *a,const void *b){
int L = ((structTest*)a)->a;
int R = ((structTest*)b)->a;
return L-R;
}
*/
//对结构体数组的二级排序
int cmp(const void *a,const void *b){
int L = ((structTest*)a)->a;
int R = ((structTest*)b)->a;
if(L<R) return -1;
else if(L==R){
int l = ((structTest*)a)->b;
int r = ((structTest*)b)->b;
return l-r;
}
else return 1;
}
int main(){
structTest structArray[5] = {
//{1,2},{0,3},{2,1},{5,1},{-1,0}
{1,2},{0,1},{0,2},{0,3},{-1,0}
};
int n=5;
qsort(structArray,n,sizeof(structArray[0]),cmp);
for(int i=0;i<5;++i) printf("%d,%d\n",structArray[i].a,structArray[i].b);
return 0;
}