排序任何类型的数
qsort(数组名,元素个数,每个元素大小,比较两个数大小的函数)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void *xp, const void* yp)
{
int*x = (int*)xp;
int *y = (int*)yp;
if (*x > *y)
return -1;//降序
else if (*x < *y)
return 1;
else
return 0;
}
/*int double_cmp(const void *xp, const void* yp)
{
double*x =(double*) xp;
double*y =(double*) yp;
if (*x > *y)
return 1;//升序
else if (*x < *y)
return -1;
else
return 0;
}*/
void show(int arr[], int sum)
{
int i = 0;
for (i = 0; i < sum; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
/*void show(double arr[], int sum)
{
int i = 0;
for (i = 0; i < sum; i++)
{
printf("%f ", arr[i]);
}
printf("\n");
}*/
int main()
{
int arr[] = { 12,34,2,1,37,68,42,15,29,100,50,49 };
//double arr[] = { 1.2,3.4,2.1,5.7,9.4,3.8,7.5 };
int sum = sizeof(arr) / sizeof(arr[0]);
show(arr, sum);
//qsort(arr, sum, sizeof(double), double_cmp);
qsort(arr, sum, sizeof(int), int_cmp);
show(arr, sum);
system("pause");
return 0;
}
用冒泡排序算法实现qsort
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int int_cmp(const void *xp, const void* yp)
{
int*x = (int*)xp;
int *y = (int*)yp;
if (*x > *y)
return 1;
else if (*x < *y)
return -1;
else
return 0;
}
void Swap(char* x,char* y,int size)
{
int i = 0;
for (i = 0; i < size; i++)
{
char tmp = *x;
*x = *y;
*y = tmp;
x++;
y++;
}
}
void myqsort(void* base, int num, int size, int(*cmp)(const void*,const void*))
{
assert(base);
assert(cmp);
char *start = (char*)base;
int i = 0, j = 0;
int flag = 0;
for (i = 0; i < num - 1; i++)
{
for (j = 0; j < num - 1 - i; j++)
{
if (cmp(start + j * size, start + (j + 1)*size) > 0)
{
flag = 1;
Swap(start + j * size, start + (j + 1)*size, size);
}
}
if (!flag) {
break;
}
}
}
int main()
{
int arr[] = { 2,3,45,67,24,1,6,49,13 };
int i = 0;
myqsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%d ",arr[i]);
}
system("pause");
return 0;
}