C:排序函数qsort()的使用

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;
	}
}

结果:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值