C语言编译器函数库自带的排序函数——qsort函数及例子

一、qsort函数介绍(可以处理不同类型的数组数据)

(详细介绍见qsort_百度百科 (baidu.com))

  • 头文件:
#include<stdlib.h>
  • 函数原型:

 二、例子

例一:针对整型值进行排序, 对“4,8,7,5,2,3,5,9,6”进行排序。

#include<stdlib.h>



int Compare_int(const void* a, const void* b)//定义比较函数
{
	int arg1 = *(const int*)a;//先强转,再解引用
	int arg2 = *(const int*)b;


	return (arg1 > arg2) - (arg1 < arg2);
	
    /*也可以用以下if判断语句
    if(arg1 > arg2)
	{
		return 1;
	}

	if (arg1 < arg2)
	{
		return -1;
	}
	else
	{
		return 0;
	}*/
}
void Show_int(int arr[], int len)//展示函数
{
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

 主函数

#include<stdio.h>

int main()
{
	int arr[] = { 4,8,7,5,2,3,5,9,6 };
	
	qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), Compare_int);
	Show_int(arr, sizeof(arr) / sizeof(arr[0]));

    return 0;
}

结果

 例二:针对浮点值进行排序, 对“34.2,22.1,35.6,44.7,12.6”进行排序。

#include<stdlib.h>

int Compare_double(const void* a, const void* b)
{
	double arg1 = *(const double*)a;//先强转,再解引用
	double arg2 = *(const double*)b;
	double tmp=arg1 - arg2;
	double EPS = 1e-6;//定义误差

	if (-EPS <= tmp && tmp >= EPS)//在误差范围之内,则两个数相等
	{
		return 0;
	}
	else if(tmp>EPS)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}

void Show_double(double brr[], int len)//展示函数
{
	for (int i = 0; i < len; i++)
	{
		printf("%f ", brr[i]);
	}
	printf("\n");
}

主函数:

#include<stdio.h>

int main()
{
	double brr[] = {34.2,22.1,35.6,44.7,12.6};
	
	qsort(brr, sizeof(brr) / sizeof(brr[0]), sizeof(double), Compare_double);
	Show_double(brr, sizeof(brr) / sizeof(brr[0]));

    return 0;
}

结果:

 例三:针对字符串进行排序, 对"abc","xyz","quan","hou","zhang","wang"进行排序。

#include<stdlib.h>

int Compare_string(const void* a, const void* b)
{
	const char* arg1 = *(const char**)a;//先强转,再解引用
	const char* arg2 = *(const char**)b;

	int tmp = strcmp(arg1,arg2);

//strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。
//基本形式为strcmp(str1,str2),
//若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

	return tmp;
}


void Show_string(const char* crr[], int len)//展示函数
{
	for (int i = 0; i < len; i++)
	{
		printf("%s ", crr[i]);
	}
	printf("\n");
}

主函数:

#include<stdio.h>

int main()
{
	const char *crr[] = { "abc","xyz","quan","hou","zhang","wang"};
	
	qsort(crr, sizeof(crr) / sizeof(crr[0]), sizeof(char*), Compare_string);
	Show_string(crr, sizeof(crr) / sizeof(crr[0]));

    return 0;
}

结果: