//运用qsort库函数对数组进行排序。
//void qsort(void* arr,传递数组名
//int size,元素个数int width,每个元素所占大小(字节)
//int (*pt)(const void* e1, const * e2)传递排序函数地址);
一.简单应用
#include<iostream>
int sort( const void* e1, const void* e2);
void print(int arr[], int size);
1)//排列int数组
int main()
{
int arr[10] = { 2,5,4,4,8,5,7,9,7,45 };
int size = sizeof(arr) / sizeof(int);
int width = sizeof(int);
qsort(arr, size, width, sort);
输出升序后的元素
print(arr, size);
return 0;
}
int sort(const void* e1,const void* e2)
{
return *(int*)e1 - *(int*)e2;//升序
}
void print(int arr[], int size)
{
for (int i = 0; i < size; i++)
cout << arr[i]<<" ";
}
//2.排列字符串
#include<iostream>
using namespace std;
int sort(const void* e1, const void* e2);
void print(char* arr, int size);
int main()
{
char arr[10]{ "afgeyhgyp" };
int size = sizeof(arr) / sizeof(char);
qsort(arr, size-1, sizeof(char), sort);
print(arr, size);
}
int sort(const void* e1, const void* e2)
{
return strcmp((char*)e1, (char*)e2);//升序
}
void print(char* arr, int size)
{
for (int i = 0; i < size-1; i++)
{
cout << arr[i] << endl;
}
}
//3.排列结构体数组
#include<iostream>
using namespace std;
int sort(const void*, const void*);
void print(struct student* arr, int size);
struct student
{
char name[10];
int number;
int math;
};
int main()
{
struct student stu[3] =
{ {"wu",2154214,97},{"li",2154215,85},{"zhang",2154216,100} };
int size = sizeof(stu) / sizeof(struct student);
int width = sizeof(struct student);
qsort(&stu, size, width, sort);
print(stu, size);
}
int sort(const void* e1, const void* e2)
{
//依照math成绩排列
return ((struct student*)e1)->math-((struct student*)e2)->math;
}
void print(struct student* arr, int size)
{
for (int i = 0; i < size; i++)
{
cout <<arr->name<< " " << arr->number << " " << arr->math << endl;
arr++;
}
}
二.编辑实现qsort程序!!!
#include<iostream>
using namespace std;
void qsort2(void*arr, int size, int width, int(*pt)(const void*, const void*));
int sort(const void*, const void*);
void print(int arr[], int size);
int main()
{
//以整型数组检验
int arr[10] = { 1,2,5,4,78,45,46,2,2,0 };
int size = sizeof(arr) / sizeof(int);
qsort2(arr, size, sizeof(int), sort);
print(arr, size);
return 0;
}
void qsort2(void* arr, int size, int width, int(*pt)(const void*, const void*))
{
void swap(char*, char*, int);
int i, j;
for (i = 0; i < size-1; i++)
{
for(j=0;j<size-i-1;j++)
if ((*pt)((char*)arr+j*width,(char*)arr+(j+1)*width)>0)
{
//交换
swap((char*)arr + j * width, (char*)arr + (j + 1) * width, width);
}
}
}
void swap(char* t1, char* t2, int width)
{
//一个字节一个交换
for (int i = 0; i < width; i++)
{
char pt;
pt = *t2;
*t2= *t1;
*t1 = pt;
t1++;
t2++;
}
}
int sort(const void* e1,const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
void print(int arr[], int size)
{
for (int i = 0; i < size; i++)
{
cout << arr[i] << endl;
}
c库函数qsort运用和编写qsort函数
于 2022-04-08 19:40:35 首次发布