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

2023-10-26

一.冒泡排序
相邻元素两两比较,按照要求交换位置,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语言】数组排序方法总结 的相关文章

随机推荐

  • 工行数据中心高级经理 李雁南:接口冒烟测试方法

    原文出自 听云技术博客 http blog tingyun com web a 今年遇到了几个问题 与接口的功能和性能相关 恰巧最近公司也在组织以冒烟测试为主题的活动 于是乎突发奇想 寻思着能否将接口测试与冒烟测试结合起来 发掘一些新的接口
  • 找工作

    一 笔试题 A JAVA基础多项选择题 比较简单 略 B 问答 1 ajax原理 如何实现刷新数据及优点 2 门面模式的解释 适用场合 3 写6个linux常用命令 4 SQL语句题 较简单 C 编程 1 有三个线程ID分别是A B C 请
  • 【黑苹果教程】对笔记本的 DSDT/SSDT 打补丁

    版权说明 本文章参考tonymacx86的Patching LAPTOP DSDT SSDTs这篇文章 如果需要转载 请注明原文地址 http blog csdn net wr132 article details 54798754 概览
  • android studio 3.5.2安装后,无法安装Hardware Accelerated Execution Manager (HAXM)

    无法安装Hardware Accelerated Execution Manager HAXM 提示 install HAXM invalid 手动安装也提示失败 配置环境 win7 64 旗舰版 jdk 64 1 8 一 解决方法一 经查
  • 操作系统——处理机调度(学习笔记)

    目录 一 处理机调度 1 处理机调度的概念 2 处理机调度的三个层次 高级调度 中级调度 低级调度 三种调度的比较 3 进程调度 时机 切换与过程 方式 4 调度算法的目标和评价指标 处理机调度算法的共同目标 批处理系统的目标 评价指标 二
  • 二维数组的二分查找

    二维数组的二分查找 你好 这是你第一次使用 Markdown编辑器 所展示的欢迎页 如果你想学习如何使用Markdown编辑器 可以仔细阅读这篇文章 了解一下Markdown的基本语法知识 题目源于我在leetcode刷到的一道题 题目如下
  • mysql_install_db命令详解_Mysql_install_db相关介绍

    mysql install db 脚本的目的是生成新的MySQL授权表 它不覆盖已有的MySQL授权表 并且它不影响任何其它数据 如果你想要重新创建授权表 首先停止mysqld服务器 如果它正运行 然后重新命名数据目录下的MySQL目录并保
  • STM32仿真必须点三次才能运行

    STM32仿真必须点三次才能运行 STM32下载完程序后 不能运行 于是进行仿真 但仿真需要点击三次全速运行才能运行 而且运行起来后未发现异常 最后排查到程序中有一处用到了printf 函数 而我的串口打印不是利用这个函数实现的 于是将其删
  • 【数据结构】MaxHeap 大顶堆

    数据结构源码 实现类 import java util Random public class MaxHeap
  • 残差网络(ResNet)

    随着我们设计越来越深的网络 深刻理解 新添加的层如何提升神经网络的性能 变得至关重要 更重要的是设计网络的能力 在这种网络中 添加层会使网络更具表现力 为了取得质的突破 我们需要一些数学基础知识 1 函数类 首先 假设有一类特定的神经网络架
  • [读书] 杂志

    http www spider com cn
  • CC++ qsort函数和sort函数

    qsort 函数和 sort 函数实现排序功能 前者是 C 语言内容 后者是 C 内容 下面逐一讲解 qsort 先来看一个对数组 arr 排序的例子 qsort 函数在 stdlib h 库中 使用时要包含该库文件 include
  • matlab的GUI怎么嵌入图片,如何用matlab在GUI中显示一张图片

    满意答案 nucynucy 2013 06 17 采纳率 47 等级 12 已帮助 10834人 建一个axes 在建一个按钮比如push button 就可以实现按钮函数的话比如 Executes on button press in p
  • Buffer分配

    一 char buf 128 memset buf 0 sizeof buf strcpy buf Welcome to server 二 char buf 128 Hello Server
  • 网页设计大作业 卖红酒网站

    卖红酒网站 详情如下图 下载链接在文末 点我下载链接 https download csdn net download weixin 43474701 60348862
  • 「鲸脸识别」已上线,夏威夷大学用 5 万张图像训练识别模型,平均精度 0.869

    内容一览 人脸识别可以锁定人类身份 这一技术延申到鲸类 便有了 背鳍识别 背鳍识别 是利用图像识别技术 通过背鳍识别鲸类物种 传统的图像识别依赖于卷积神经网络 CNN 模型 需要大量训练图像 并且只能识别某些单物种 近期 夏威夷大学的研究人
  • java开发周报变日报_程序员专用的日报、周报、月报、季报自动生成器!

    快速生成日报 周报 月报 季报 支持 windows mac linux 下载使用 windows https github com yurencloud daily releases download v2 0 0 daily windo
  • css3实现圆环加载进度条动画

    最近有人问我关于css3圆环的问题 要实现一个圆环 并且有加载特效 于是我看了看一般关于圆环实现的原理 以及自己手写了一个加载动画 可能体验还不是特别好 但是能用 话不多说 一下是代码 html结构 div class circle div
  • 考研资源免费分享

    1 408王道 链接 https pan baidu com s 1ac5HxvBzGtlet0CQWmtF2g 密码 eifm 2 英语全程班讲义及听力 链接 https pan baidu com s 1R 8fG5PUoRvia X5
  • 【C语言】数组排序方法总结

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