0
点赞
收藏
分享

微信扫一扫

冒泡排序实现快速排序qsort C语言

 目录

序言

快速排序         

基本使用 

参数解释 

模拟实现 


序言

快速排序         

基本使用 

参数解释 

模拟实现 

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>

//这里整型是这样写的,但是比较其他数据就会变哈
int cmp_int(const void* e1,const void* e2)
{
	return (*(int*)e1 - *(int*)e2);
}

//打印函数
void Print(int arr[],int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ",arr[i]);
	}
}

//交换函数
void swap(void* p1, void* p2, size_t width)
{
	int i = 0;
    //因为要交换这么多长度次,所以要for循环
	for (i = 0; i < width; i++)
	{
		char tmp = *((char*)p1 + i);
		*((char*)p1 + i) = *((char*)p2 + i);
		*((char*)p2+i) = tmp;
	}
}

void bubble_qsort(void* base, size_t num, size_t width, int(* cmp)(const void* e1, const void* e2))
{
	int i = 0;
	int j = 0;
	for (i = 0; i < num; i++)
	{
		for (j = 0; j < num-i-1; j++)
		{
            //强制类型转换为char*  这里加上j*width值得注意
			if (cmp((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[] = { 1,3,2,5,7,9,8,4,6 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	//qsort(arr, sz, sizeof(int), cmp_int);
	bubble_qsort(arr, sz, sizeof(int), cmp_int);
	Print(arr, sz);
	return 0;
}
举报

相关推荐

0 条评论