C:排序函数qsort
在C语言中,对于qsort()函数可以进行任何数据类型的排序。
1.qsort()函数
void qsort(void* base,//给出地址
size_t num,//给出数组元素的个数
size_t witdth,//每个元素的大小
int (*compare)(const void* elem1,const void* elem2)//按照的比较方式
);
2.排序整形类型数组
//在使用sqort()函数时,要引入头文件
#include<search.h>
int int_comp(const void* e1, const void* e2){
return *(int*)e1 - *(int*)e2;无类型指针必须进行强转,然后进行取值
}
int main(){
//调用sqort();函数
qsort(ar1, size1, sizeof(int), int_comp);//数组名,素组大小,数组元素的大小,
}
3.排序字符类型
#include<include.h>
#include<search.h>
int chr_comp(const void* e1, const void* e2){
return strcmp(*(char**)e1 , *(char**)e2);
}
int main(){
//调用sqort();函数
qsort(ar2, size2, sizeof(char), char_comp);
}
4.排序结构体类型
typedef struct Student{
int id;
char name[10];
int age;
}Student;
int typ_comp(const void*e1, const void*e2){
//根据自己所需排序的结构体成员变量,进行排序,例如,排序id
return(((Student*)e1)->id - ((Student*)e2)->id);//让e1和e2的id的关键值进行比较
}
int main(){
qsort(stu, size3, sizeof(Student), typ_comp);
}
最终代码及结果
#include<iostream>
#include<assert.h>
#include<search.h>
using namespace std;
//有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);
typedef struct Student{
int id;
char name[10];
int age;
}Student;
int typ_comp(const void*e1, const void*e2){
//根据自己所需排序的结构体成员变量,进行排序,例如,排序id
return(((Student*)e1)->id - ((Student*)e2)->id);//让e1和e2的id的关键值进行比较
}
int int_comp(const void* e1, const void* e2){
return *(int*)e1 - *(int*)e2;
}
int chr_comp(const void* e1, const void* e2){
return strcmp(*(char**)e1, *(char**)e2);
}
int main(){
int ar1[] = { 1, 2, 3, 4, 5, 3, 4, 5, 2, 3, 9, 7, 7, 0 };
char *ar2[] = { "dgdf", "sfs", "tui", "wer", "aqerf", "sdfghyt", "AEcbhgf" };
Student stu[] = { {102,"stt",18}, {115,"arr",24}, {128,"rtt",12}, {101,"wqq",22} };
int size1 = sizeof(ar1) / sizeof(ar1[0]);
int size2 = sizeof(ar2) / sizeof(ar2[0]);
int size3 = sizeof(stu) / sizeof(stu[0]);
cout << "输出未排序的数组ar1:" << endl;
for (int i = 0; i < size1; i++){
cout << ar1[i] << " ";
}
cout << endl;
cout << "输出未排序的数组ar2:" << endl;
for (int i = 0; i < size2; i++){
cout << ar2[i] << " ";
}
cout << endl;
cout << "输出未排序的数组stu:" << endl;
for (int i = 0; i < size3; i++){
cout <<stu[i].id<< " ";
cout << stu[i].name <<" ";
cout << stu[i].age << endl;
}
qsort(ar1, size1, sizeof(int), int_comp);
qsort(ar2, size2, sizeof(char*), chr_comp);
qsort(stu, size3, sizeof(Student), typ_comp);
cout << "输出已排序的数组ar1:" << endl;
for (int i = 0; i < size1; i++){
cout << ar1[i] << " ";
}
cout << endl;
cout << "输出已排序的数组ar2:" << endl;
for (int i = 0; i < size2; i++){
cout << ar2[i] << " ";
}
cout << endl;
cout << "输出已排序的数组stu:" << endl;
for (int i = 0; i < size3; i++){
cout << stu[i].id << " ";
cout << stu[i].name << " ";
cout << stu[i].age << endl;
}
}
结果: