【C语言】数组排序方法总结

2023-05-16

一.冒泡排序
相邻元素两两比较,按照要求交换位置,n个元素一共要比较n-1趟,每趟要两两比较未排序元素个数-1次。

#include<stdio.h>

void bubble_sort(int* p, int len)//函数实现
{
	int i = 0;
	int j = 0;
	for (i = 0; i < len - 1; i++)//需要进行len-1趟
	{
		int flag = 1;//flag=1,说明已经排好序
		for (j = 0; j < len - 1 - i;j++)//每趟两两比较较未排好序元素个数-1次。
		{
			if (p[j] > p[j+1])
			{
				int tmp = p[j];
				p[j] = p[j + 1];
				p[j + 1] = tmp;
				flag = 0;
			}
		}
		if (flag==1)//判断是否排好序
			break;
	}
}

int main()
{
	int arr[] = { 1,5,9,11,46,79,12 };
	int sz = sizeof arr / sizeof arr[0];
	bubble_sort(arr,sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

在这里插入图片描述

二.选择排序
从小到大排序,拿第一个位置的元素去和后面的元素比,找到最小的,二者位置上的元素进行交换,在拿第二个位置的元素和后面的比,以此类推。

#include<stdio.h>

void selection_sort(int* p, int len)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < len - 1; i++)
	{
		int index = i;
		for (j = i + 1; j < len; j++)
		{
			if (p[index] > p[j])
				index = j;
		}
		if (index != i)
		{
			int tmp = p[index];
			p[index] = p[i];
			p[i] = tmp;
		}
	}
}

int main()
{
	int arr[] = { 11,55,1,6,89,23 };
	int sz = sizeof arr / sizeof arr[0];
	selection_sort(arr, sz);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

在这里插入图片描述
三.快速排序

头文件:stdlib.h
结构:void qsort(数组名,数组长度,数组元素大小,自定义的函数cmp)

1.对int类型数组排序

int arr[10];

sample:

int cmp(const void* a,const void* b)
{
return * (int*)a- * (int*)b;
}

qsort(arr, 10, sizeof(arr[0]), cmp);

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

int cmp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;//这是顺序排列,若改为* (int*)b- * (int*)a就是逆序排列(下同
}

int main()
{
	int arr[] = { 15,3,47,59,13,2,1 };
	int sz = sizeof arr / sizeof arr[0];
	qsort(arr, sz, sizeof arr[0], cmp);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

在这里插入图片描述

2.对double类型数组排序

double arr[10];

sample:

int cmp(const void* a,const void* b)
{
return * (double* )a>* (double*)b ? 1:-1
}

qsort(arr,10,sizeof(arr[0]),cmp);

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

void cmp(const void* a, const void* b)
{
	return *(double*)a > *(double*)b ? 1 : -1;
}

int main()
{
	double arr[] = { 6.6 ,1.1,3.3,5.5,7.7};
	int sz = sizeof arr / sizeof arr[0];
	qsort(arr, sz, sizeof arr[0], cmp);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%f ", arr[i]);
	}
	return 0;
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言】数组排序方法总结 的相关文章

随机推荐

  • 一篇关于利用numba加速python运行效率的笔记

    一篇关于加速python代码运行效率的笔记 一 原始代码 部分 分析二 变量预分配内存实现加速三 numba装饰器实现加速3 1 为什么numba可以对python代码加速 xff1f 3 2 修改代码匹配numba的类型支持 四 其它尝试
  • spring框架的知识点总结

    文章目录 什么是Spring框架 什么是Spring 作用 如何在快速添加Maven依赖 SpringFramework 5 x核心之IOC容器什么是IOC 案例 SpringFramework 5 x核心之DI依赖注入什么是DI 案例 S
  • Qt导入Opencv出现undefined reference to cv::xxx

    Qt配置Opencv在Qt运行时报错undefined reference to cv xxx Face Recognizer报错 FaceRecognizer load const char 41 报错 首先 xff0c 如果出现cv x
  • 我是歌手Java实现

    span class token comment AbstractSinger java span span class token keyword package span span class token namespace cn sp
  • 局域网内开FTP服务器共享或传输文件

    开启FTP服务教程 xff08 以Windows10为例 xff09 步骤一 xff1a 关闭防火墙 设置 网络和Internet 以太网 点击网络和共享中心 Windows Defender防火墙 允许应用或功能通过Windows Def
  • 计算机二级C语言软件VC++2010的使用步骤

    本文仅限参加计算机二级C语言考试的同学 xff0c 一般不使用这个软件的 xff0c 看一下 xff0c 避免考试时第一次用到乱了阵脚 在计算机二级考试时 xff0c 直接找到并双击题目中要求的文件即可自动打开软件的界面 考试中打开哪个文件
  • 交叉编译概念及交叉编译工具链的安装

    1 交叉编译是什么 xff0c 为什么要交叉编译 是什么 xff1f 交叉编译 xff1a 是在一个平台上生成另一个平台上的可执行代码 我们在windows上面编写C51代码 xff0c 并编译成可执行代码 xff0c 如xx hex 是在
  • 完成一个SpringBoot项目——员工管理系统

    SpringBoot项目 员工管理系统 该系统为一个springboot项目 员工管理系统的代码 xff0c 前端使用的模板是thymeleaf xff0c 数据写在了dao层 xff0c 没有用数据库 xff0c 完全可以实现增删改查 目
  • 通信术语及综合题

    ITU xff1a International Telecommunication Union国际电信联盟 xff0c 联合国的一个重要专门机构 xff0c 也是联合国机构中历史最长的一个国际组织 简称 国际电联 电联 或 ITU IMT
  • VS2013的Visual C++ 项目如何修改目标框架和平台工具集

    https msdn microsoft com zh cn library ff770576 aspx 如何 xff1a 修改目标框架和平台工具集 Visual Studio 2013 其他版本 可以更改 Visual C 43 43 项
  • Java类继承中的静态块与构造

    span class hljs comment 创建一个父类 span span class hljs class span class hljs keyword class span span class hljs title Super
  • node(express脚手架)+html(jquery模板)

    上代码 html部分 span class token operator lt span span class token operator span span class token constant DOCTYPE span html
  • Ubuntu 使用技巧备忘

    Ubuntu 使用技巧备忘 xff08 持续更新 xff09 小白向 xff0c 备忘 xff0c Ubuntu 20 04版本 Ubuntu 使用技巧备忘 xff08 持续更新 xff09 Ubuntu 使用技巧备忘 xff08 持续更新
  • c语言阶乘的累加和

    c语言 阶乘的累加和 题目描述 求1 43 2 43 n 输入 输入一个整数n xff0c 你可以假定n不大于10 输出 输出一个整数 xff0c 即阶乘累加的结果 xff0c 单独占一行 样例输入 4 样例输出 33 代码如下 span
  • 位运算骚操作---利用位运算求组合数

    文章目录 一道利用组合求和的例题位运算如何实现组合的呢 xff1f 解题代码 一道利用组合求和的例题 这道题乍一看就是把所有的组合给列举出来 xff0c 然后求和看是否等于目标值 xff0c 输出需要注意的是优先输出靠前的下标元素 xff0
  • 普联(TP-LINK)的无线网卡在Linux下如何使用

    xff08 如果这篇文章对你有所帮助 xff0c 请为我点个赞 xff0c 要问我点赞有什么作用 xff0c 嘿嘿 xff0c 只是为了我的心情愉悦 xffe3 xffe3 xff09 之前入手了一款普联的无线网卡 xff0c 型号是TL
  • 【C语言】判断素数的函数

    文章目录 一 函数描述二 素数定义三 函数实现 一 函数描述 自定义一个函数 xff0c 传入一个整数n xff0c 判断是否为素数 若是返回1 xff0c 否则返回0 二 素数定义 素数又称质数 一个大于1的自然数 xff0c 除了1和它
  • 【C语言】判断闰年的函数

    文章目录 一 函数描述二 相关说明三 函数实现 一 函数描述 自定义一个函数 xff0c 传入一个年份n xff0c 判断是否为闰年 若是返回1 xff0c 否则返回0 二 相关说明 平年二月28 xff0c 闰年二月29 平年有365天
  • 【C语言】求n的阶乘(递归法和循环法)

    文章目录 一 循环法二 递归法 一 循环法 根据阶乘的计算方法 xff1a n xff01 61 1 2 3 n xff0c 我们在一个for循环完成 n 次乘法运算 注意因为是连乘 xff0c 最终阶乘结果可能会非常大所以我们在Fac函数
  • 【C语言】数组排序方法总结

    一 冒泡排序 相邻元素两两比较 xff0c 按照要求交换位置 xff0c n个元素一共要比较n 1趟 xff0c 每趟要两两比较未排序元素个数 1次 span class token macro property span class to