使用回调函数,模拟实现qsort
#include <stdio.h> int int_cmp(const void * p1, const void * p2) { return (*( int *)p1 > *(int *) p2); } void _swap(void *p1, void * p2, int size) { int i = 0; for (i = 0; i< size; i++) { char tmp = *((char *)p1 + i); *(( char *)p1 + i) = *((char *) p2 + i); *(( char *)p2 + i) = tmp; } } void bubble(void *base, int count , int size, int(*cmp )(void *, void *)) { int i = 0; int j = 0; for (i = 0; i< count - 1; i++) { for (j = 0; j<count-i-1; j++) { if (cmp ((char *) base + j*size , (char *)base + (j + 1)*size) >0) { _swap(( char *)base + j*size, (char *)base + (j + 1)*size,size); } } } } int main() { int arr[] = { 1,3,6,2,4,5,8,9,0,7 }; int i = 0; bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp); for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++) { printf( "%d ", arr[i]); } printf("\n"); return 0; }
//对整型数组进行排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int arr[10000],n,i;
int cmp(const void *a, const void *b)
{
return(*(int *)a-*(int *)b);
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&arr[i]);
qsort(s,n,sizeof(arr[0]),cmp);
for(i=0;i<n;i++) printf("%d ",arr[i]);
return(0);
}
//对double类型数组进行排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int arr[10000],n,i;
int cmp(const void *a, const void *b)
{
return(*(int *)a-*(int *)b);
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&arr[i]);
qsort(s,n,sizeof(arr[0]),cmp);
for(i=0;i<n;i++) printf("%d ",arr[i]);
return(0);
}
//对字符串数组排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char arr3[10000],i,n;
int cmp(const void *a,const void *b)
{
return(*(char *)a-*(char *)b);
}
int main()
{
scanf("%s",arr3);
n=strlen(arr3);
qsort(arr3,n,sizeof(arr3[0]),cmp);
printf("%s",arr3);
return(0);
}
//对结构体进行排序
#include <stdio.h>
#include <stdlib.h>
struct node
{
double date1;
int no;
} arr4[100];
int i,n;
int cmp(const void *a,const void *b)
{
struct node *aa=(node *)a;
struct node *bb=(node *)b;
return(((aa->date1)>(bb->date1))?1:-1);
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
arr4[i].no=i+1;
scanf("%lf",&arr4[i].date1);
}
qsort(arr4,n,sizeof(arr4[0]),cmp);
for(i=0;i<n;i++) printf("%d %lf\n",arr4[i].no,arr4[i].date1);
return(0);
}
//字符串数组排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *arr5[100];
int i,n;
int cmp(const void *a,const void *b)
{
return(strcmp(*(char**)a,*(char**)b));
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
arr5[i]=(char*)malloc(sizeof(char*));
scanf("%s",arr5[i]);
}
qsort(arr5,n,sizeof(arr5[0]),cmp);
for(i=0;i<n;i++) printf("%s\n",arr5[i]);
return(0);
}
编辑器药丸