2024-03-02_qsort的使用等_作业

本文介绍了如何在C语言中使用qsort函数进行数组排序,以及模仿其功能实现了一个通用的冒泡排序算法,通过cmp_int函数进行元素比较。
摘要由CSDN通过智能技术生成

1.练习使用库函数,qsort排序各种类型的数据

qsort函数形式:

void qsort(void *base //指针,数组第一个元素
           size_t num //排序数组元素个数
           size_t size //元素大小
           int(*compar)(const void*,const void*) //函数指针,两个元素比较

用qsort函数排序一个数组:

#include <stdio.h>
int cmp_int(const void* p1, const void* p2) {
	if (*(int*)p1 > *(int*)p2)
		return 1;
	else if (*(int*)p1 == *(int*)p2)
		return 0;
	else
		return -1;
}
int main() {
	int arr[10] = { 9,18,23,45,11,24,55,99,44,12 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	qsort(arr, sz, sizeof(arr[0]), cmp_int);
	for (int i = 0; i < sz; i++) {
		printf("%d ", arr[i]);
	}

	return 0;
}

 2.模仿qsort的功能实现一个通用的冒泡排序:

#include <stdio.h>
int cmp_int(const void* p1, const void* p2) {
	if (*(int*)p1 > *(int*)p2)
		return 1;
	else if (*(int*)p1 == *(int*)p2)
		return 0;
	else
		return -1;
}
void Swap(char* buf1, char* buf2, size_t width) {
	for (int i = 0; i < width; i++) {
		char tmp = *buf1;
		*buf1 = *buf2;
		*buf2 = tmp;
		buf1++;
		buf2++;
	}
}
//void *base是接纳所有类型类型,width是字节大小长度;
void bubble_sort(void* base, size_t sz, size_t width, int(*tmp)(const void* p1, const void* p2)) {
	for (int i = 0; i < sz - 1; i++) { // <span style="color:red">修改循环条件为 sz - 1</span>
		for (int j = 0; j < sz - i - 1; j++) { // <span style="color:red">修改循环条件为 sz - i - 1</span>
			if (tmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0) {
				Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
			}
		}
	}
}
int main() {
	int arr[10] = { 9,18,23,45,11,24,55,99,44,12 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);
	for (int i = 0; i < sz; i++) {
		printf("%d ", arr[i]);
	}

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值