新手快速上手掌握基础排序<二>快速排序快速入门

目录

引言 

一:快速排序qsort的简介

1.qsort是一个库函数

2.库函数的查询了解方法

3.qsort的具体使用方法 

4.qsort函数使用的一些注意点 

5.qsort函数的特点

6.代码实现

(1)整数数组的快速排序

(2)结构体的快速排序(学号和姓名两种)

7.感谢观看 


听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

引言 

在了解基本的冒泡法,选择法之后,我们知道这两种方法只能排序单一类型数据,如果是多种类型的话,则感到无力,接下来我们将介绍一种更高效的方法---快速排序qsort

一:快速排序qsort的简介

1.qsort是一个库函数
2.库函数的查询了解方法

使用cpplusplus,c/c++官方网站

3.qsort的具体使用方法 

  

4.qsort函数使用的一些注意点 

由上面得知

void qsort(void *base, //指向需要排序的数组的第一个元素

size_t num,//排序的元素个数

size_t size //一个元素的大小,单位是字节

int (*cmp)(const void *p1,const void *p2)//函数指针类型--这个函数指针指向的函数,能够比较base指向数组中的两个元素

特别注意:void *的指针为无具体类型的指针,可以接收任意类型的地址,不能直接解引用的,也不能直接进

行指针计算的需要强制转换为需要的类型

5.qsort函数的特点

(1)快速排序的方法

(2)适合于任意类型数据的排序

(3)默认是升序排序

6.代码实现
(1)整数数组的快速排序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define N 5
int com(const void* p1, const void* p2)
{
	return (*(int*)p1 - *(int*)p2);//降序的话则改为 return (*(int*)p2-*(int*)p1);
}
int main()
{
	int a[N] = { 0 };
	int i = 0;
	for (i = 0; i < N; i++)
	{
		scanf("%d", &a[i]);
	}
	qsort(a, N, sizeof(a[0]), com);
	for (i = 0; i < N; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

  

降序排序的话则如上改动就行 

(2)结构体的快速排序(学号和姓名两种)

#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student
{
	int num;//学号
	char name[20];//姓名
};
int com_num(const void* p1, const void* p2)
{
	return ((struct Student *)p1)->num-((struct Student *)p2)->num;
}
int main()
{
	struct Student s[N];
	int i = 0;
	for (i = 0; i < N; i++)
	{
		scanf("%d%s", &s[i].num, s[i].name);
	}
	qsort(s, N, sizeof(s[0]), com_num);//学号比较
	for (i = 0; i < N; i++)
	{
		printf("%5d%8s\n", s[i].num, s[i].name);
	}
	return 0;
}

 程序结果为


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
struct Student
{
	int num;//学号
	char name[20];//姓名
};
int com_name(const void* p1, const void* p2)
{
	return strcmp(((struct Student*)p1)->name, ((struct Student*)p2)->name);
}
int main()
{
	struct Student s[N];
	int i = 0;
	for (i = 0; i < N; i++)
	{
		scanf("%d%s", &s[i].num, s[i].name);
	}
	qsort(s, N, sizeof(s[0]), com_name);//姓名比较
	for (i = 0; i < N; i++)
	{
		printf("%5d%8s\n", s[i].num, s[i].name);
	}
	return 0;
}

程序运行结果为 

7.感谢观看 

相关推荐

  1. 快速排序

    2024-01-01 07:46:03       34 阅读
  2. 排序算法——快速排序

    2024-01-01 07:46:03       41 阅读
  3. 排序算法——快速排序

    2024-01-01 07:46:03       41 阅读
  4. 排序算法-快速排序

    2024-01-01 07:46:03       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-01 07:46:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-01 07:46:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-01 07:46:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-01 07:46:03       20 阅读

热门阅读

  1. Prometheus监控mysql

    2024-01-01 07:46:03       37 阅读
  2. 民营银行数字化安全运营的思考

    2024-01-01 07:46:03       29 阅读
  3. 编程笔记 html5&css&js 017 HTML样式

    2024-01-01 07:46:03       31 阅读
  4. UntiyShader(六)Unity提供的Cg/HLSL语义

    2024-01-01 07:46:03       33 阅读
  5. C++的一些知识

    2024-01-01 07:46:03       27 阅读
  6. python SVM 保存和加载模型参数

    2024-01-01 07:46:03       39 阅读
  7. C 多维数组、特殊字符和字符串函数详解

    2024-01-01 07:46:03       38 阅读
  8. 第12课 循环综合举例

    2024-01-01 07:46:03       29 阅读
  9. MySQL5.7服务器命令选项

    2024-01-01 07:46:03       26 阅读
  10. MySQL安装与配置

    2024-01-01 07:46:03       37 阅读
  11. CSS Grid 和 Flexbox

    2024-01-01 07:46:03       36 阅读
  12. 前端学习笔记 2:Vue

    2024-01-01 07:46:03       34 阅读
  13. Linux上使用Certbot生成免费SSL证书

    2024-01-01 07:46:03       40 阅读