qsort函数的应用
- 四种不同类型数据的排序,分别是int,char,str,和float
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#pragma warning(disable:4996)
int ComperInt(const void *p, const void *q)
{
return (*(int*)p - *(int*)q);
}
int Comperchar(const void *p, const void *q)
{
return (*(unsigned char*)p - *(unsigned char*)q);
}
int Comperchar_1(const void *p, const void *q)
{
return strcmp(*(char **)p, *(char **)q);
}
int CompFloat(const void *e1,const *e2)
{
float p=float(pow(1,-6));
if(*(float*)(e1)-*(float*)(e2)>p)
{
return 1;
}
else if(*(float*)(e1)-*(float*)(e2)<-p)
{
return -1;
}
else
{
return 0;
}
}
void Print(int *arr, int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void Print_char(const char *brr)
{
for (int i = 0; i < strlen(brr); i++)
{
printf("%c ", brr[i]);
}
printf("\n");
}
void Print_char_1(const char **str,int size1)
{
for (int i = 0; i < size1; i++)
{
printf("%s ", str[i]);
}
printf("\n");
}
void Print_f(float *crr, int size_f)
{
for (int i = 0; i < size_f; i++)
{
printf("%.2f ", crr[i]);
}
printf("\n");
}
int main(){
int arr[] = {
155, 55, 88, 6, 7, 8, 9, 12, 23, 48, 7, 8, 24 };
int size = sizeof(arr) / sizeof(arr[0]);
char brr[] = "adicfjgheb";
char *str[] = {
"daw", "as", "wwdar" };
float crr[] = {
200.00, 5.74, 3.90, 5.28 };
int size_f = sizeof(crr) / sizeof(crr[0]);
int size_s = sizeof(str) / sizeof(str[0]);
qsort(arr, size, sizeof(int), ComperInt);
qsort(brr, strlen(brr), sizeof(char), Comperchar);
qsort(str, size_s, sizeof(char *), Comperchar_1);
qsort(crr, size_f, sizeof(float), Comperfloat);
Print(arr, size);
Print_char(brr);
Print_char_1(str,size_s);
Print_f(crr, size_f);
system("pause");
return 0;
}
qsort函数的模拟实现
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#pragma warning(disable:4996)
int Comstr(const void* p, const void *q)
{
return strcmp((char *)p, (char *)q);
}
int ComperInt(const void *p, const void *q)
{
return (*(int*)p - *(int*)q);
}
void Swap(char *src, char *dest, int size)
{
while (size)
{
char temp = *src;
*src = *dest;
*dest = temp;
size--;
src++,dest++;
}
}
void print(char **arr, int num)
{
for (int i = 0; i < num; i++)
{
printf("%s\n", arr[i]);
}
}
void Qsort(void* arr, int num, int size, int(*compar)(const void*, const void*))
{
assert(arr != NULL);
assert(compar != NULL);
char* e = (char*)arr;
for (int i = 0; i < num - 1; i++)
{
int ret = 0;
for (int j = 0; j < num -1-i ; j++)
{
if (compar(e+ j*size, e + (j + 1)*size)>0)
{
ret = 1;
Swap(e + j*size, e + (j + 1)*size,size);
}
}
if (ret == 0)
{
break;
}
}
}
int main(){
char *arr[] = {
"b1234", "a1234", "4321", "abcdef" };
int num = sizeof(arr) / sizeof(arr[0]);
Qsort(arr,num,sizeof(char*),Comstr);
print(arr,num);
system("pause");
return 0;
}