数组排序(C 语言实现)

2023-05-16

本文主要包含常见的数组排序方法。

选择排序

原理

  1. 在原始数组中取未排序的首元素,与其后方所有元素比较,不满足顺序,则交换
  2. 首元素此时满足条件,未排序部分后移
  3. 重复上述操作

代码实现

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

void SelectSort(int *p,int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
            if(p[i]<p[j])
            {
                p[i] = p[i]^p[j];
                p[j] = p[i]^p[j];
                p[i] = p[i]^p[j];
            }
}

int main(void)
{
    int arr[10] = {1,5,9,6,4,3,2,7,8,0};

    SelectSort(arr,10);

    for(int i=0;i<10;i++)
        printf("%d\n",arr[i]);

    return 0;
}

结果为:

9
8
7
6
5
4
3
2
1
0

改进

如果觉得每次交换很麻烦,可以先找出每次迭代的最大值,然后再交换位置,这样交换次数少,在数据量比较大时效率比较高。

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

void SelectSort(int *p,int n)
{
    int max;
    for(int i=0;i<n-1;i++)
    {
        max = i;
        for(int j=i+1;j<n;j++)
            if(p[max]<p[j])
                max = j;
        if(max!=i)
        {
            p[i] = p[i]^p[max];
            p[max] = p[i]^p[max];
            p[i] = p[i]^p[max];
        }
    }
}

int main(void)
{
    int arr[10] = {1,5,9,6,4,3,2,7,8,0};

    SelectSort(arr,10);

    for(int i=0;i<10;i++)
        printf("%d\n",arr[i]);

    return 0;
}

结果为:

9
8
7
6
5
4
3
2
1
0

冒泡排序

原理

  1. 从头开始,比较相邻的两个元素,如果不满足顺序,则交换
  2. 此时有一个元素的位置确定,不再参加下轮比较
  3. 重复上述操作

代码实现

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

void PopSort(int *p,int n)
{
    for(int i=0;i<n-1;i++)
        for(int j=0;j<n-i-1;j++)
            if(p[j]<p[j+1])
            {
                p[j] = p[j]^p[j+1];
                p[j+1] = p[j]^p[j+1];
                p[j] = p[j]^p[j+1];
            }
}

int main(void)
{
    int arr[10] = {1,5,9,6,4,3,2,7,8,0};

    PopSort(arr,10);

    for(int i=0;i<10;i++)
        printf("%d\n",arr[i]);

    return 0;
}

结果为:

9
8
7
6
5
4
3
2
1
0

改进

如果当前迭代的元素已经有序,就说明整体已经有序,无须进行下次迭代。

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

void PopSort(int *p,int n)
{
    int flag;
    for(int i=0;i<n-1;i++)
    {
        flag = 0;
        for(int j=0;j<n-i-1;j++)
            if(p[j]<p[j+1])
            {
                p[j] = p[j]^p[j+1];
                p[j+1] = p[j]^p[j+1];
                p[j] = p[j]^p[j+1];
                flag = 1;
            }
        if(!flag)
            break;
    }
}

int main(void)
{
    int arr[10] = {1,5,9,6,4,3,2,7,8,0};

    PopSort(arr,10);

    for(int i=0;i<10;i++)
        printf("%d\n",arr[i]);

    return 0;
}

结果为:

9
8
7
6
5
4
3
2
1
0

快速排序

原理

  1. 从数组中挑选一个元素作为基准
  2. 分组。所有比基准小的位于基准的左侧,比基准大的位于基准的右侧
  3. 以递归方式分别对基准两侧的序列进行排序

代码实现

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

void QuickSort(int *p,int low,int high)
{
    int l = low,h = high;
    int std = p[low];
    if(low<high)
    {
        while(l<h)
        {
            if(p[h]>=std && l<h)
                h--;
            p[l] = p[h];
            if(p[l]<std && l<h)
                l++;
            p[h] = p[l];
        }

        p[l] = std;
        QuickSort(p,low,l-1);
        QuickSort(p,l+1,high);
    }
}

int main(void)
{
    int arr[10] = {1,5,9,6,4,3,2,7,8,0};

    QuickSort(arr,0,9);

    for(int i=0;i<10;i++)
        printf("%d\n",arr[i]);

    return 0;
}

结果为:

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

数组排序(C 语言实现) 的相关文章

  • Linux下生产者消费者问题的C语言实现

    注 xff1a 查看全文请关注作者 xff0c 或点击前往 xff1a 生产者 消费者问题的C语言实现 实验六 生产者 消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题 xff1a 生产者 消费者 xff0c 具体
  • MergeSort(迭代归并排序)——C语言实现

    前言 xff1a 归并排序跟快速排序有异曲同工之妙 xff0c 都是分治法的典型代表 但是这种分治法都有不小的弊端 xff0c 就是需要占用大量的系统栈 xff0c 很容易造成空间的大量浪费 xff0c 所以就有用迭代来优化递归的操作 这次
  • n阶行列式计算Python和C语言实现

    行列式在数学中 xff0c 是一个函数 xff0c 其定义域为det的矩阵A xff0c 取值为一个标量 xff0c 写作det A 或 A 无论是在线性代数 多项式理论 xff0c 还是在微积分学中 xff08 比如说换元积分法中 xff
  • <操作系统>读者写者问题(读者优先)C语言实现

    问题描述 代码 span class token macro property span class token directive keyword include span span class token string lt stdio
  • 使用汇编语言与C语言实现LED1/LED2/LED3三盏灯点亮

    汇编语言代码段 text global start start LED13 INIT LED1 3点灯 RCC章节 64 1 设置GPIO始终使能 通过RCC AHB4ENSRTR寄存器设置0x50000A28 4 61 1 ldr r0
  • C语言实现16进制数与10进制数的转化

    C语言实现16进制数与10进制数的转化 这里有两种情况 xff1a 第一种情况 xff1a 如果我得到的是一个16进制数 xff0c 我通过肉眼看到的就是16进制显示 xff08 这里看到的肯定打印结果 xff09 xff0c 比如85 x
  • javascript数组排序

    javascript原生排序算法sort xff0c 如果不带排序函数 xff0c 那么就是默认按照升序排列 如果是数字类型就按照从小到大的顺序排列 xff0c 如果是字符串 xff0c 就按照字母顺序排列 Sorts an array i
  • 每个程序员半小时内必须解决的5个编程问题(C语言实现)

    最近关注的几个算法的公众号都看到了如题的一篇文章 xff0c 后1道题单拿出来我肯定不能半个小时内解决 前三道题非常基础 xff0c 相信大部分人能用自己熟悉的语言很快解决 xff0c 而且解决的方法可以多种多样 xff0c 这里说一下我对
  • C语言实现Split函数

    借助C语言的动态内存分配 xff0c 实现类似VB中Split函数的效果 结构体介绍 xff1a IString xff1a 参数 str 字符串数组的指针 参数 num 字符串个数 函数介绍 功能 xff1a 按一个字符来拆分字符串 参数
  • C语言---数组排序

    1 冒泡排序 xff08 从后往前 xff09 1 比较相邻的元素 如果第一个比第二个大 xff0c 就交换他们两个 2 对每一对相邻元素作同样的工作 xff0c 从开始第一对到结尾的最后一对 在这一点 xff0c 最后的元素应 该会是最大
  • C 语言实现 FTP 服务器

    这个有专门的课程讲解我看到 xff0c 百度也能搜到不少相关的 我觉得你可以去把这个弄懂
  • 无名的ADRC的C语言实现

    分为ADRC h和ADRC c 确实看头文件有用 xff0c 有哪些变量都一目了然 和ACfly一样的是比如都有beta这个参数 ADRC c 本程序只供购买者学习使用 xff0c 版权著作权属于无名科创团队 xff0c 无名科创团队将飞控
  • 使用Verilog HDL语言实现4位超前进位加法器

    一 1位半加器的实现 1 1 原理 半加器由两个一位输入相加 xff0c 输出一个结果位和进位 xff0c 没有进位输入的加法器电路 1 2 真值表 1 3 逻辑表达式 S 61 A B C 61 A amp B 1 4 Verilog 实
  • C语言实现FTP文件传输

    一 要求 FTP实则为两个程序的互相交流 xff0c 把信息指令相互发送并处理 1 客户端请求下载文件 把文件名发送给服务器 2 服务器接收客户端发送的文件名 根据文件名找到文件 xff0c 把文件大小发送给客户端 3 客户端接收到文件大小
  • PID控制算法的C语言实现

    PID控制算法的C语言实现一 PID算法原理 最近两天在考虑一般控制算法的C语言实现问题 xff0c 发现网络上尚没有一套完整的比较体系的讲解 于是总结了几天 xff0c 整理一套思路分享给大家 在工业应用中PID及其衍生算法是应用最广泛的
  • windows下C语言实现TCP通信

    编译器 xff1a vs2017 语言 xff1a c语言 具体的原理可以在其他博客看到 在我学习winsock编程时 xff0c 发现那些博客代码居然在我机器上没一个能运行 xff0c 可能是我水平有限 于是我根据winsock相关知识
  • C语言实现HTTP的GET和POST请求

    HTTP请求和IP TCP 所谓的HTTP协议是基于IP TCP协议的 xff0c 所以要获取远端的html数据只要创建socket对象就足够了 xff1b HTTP是基于IP TCP加上了网络请求的固定格式 get 请求 include
  • 数据结构哈希查找的C语言实现

    大家好 xff0c 我是练习编程时长两年半的昆工第一ikun xff0c 今天我们来分享查找算法中的一个 哈希查找 xff0c 哈希查找适用于有庞大的数据量时的查找 xff0c 是一种很好用的查找算法 xff0c 话不多说 xff0c 开团
  • C++:C语言实现HTTP的GET和POST请求

    https www cnblogs com diligenceday p 6255788 html
  • js数组的顺序排序、完全随机打乱排序 总结

    一 顺序排序 1 按字符编码排序 sort var testArray 23 500 1000 300 34 2 testArray sort alert testArray 2 1000 23 300 34 500 2 将数组元素倒序排

随机推荐

  • Pycharm双击没反应,或者No JVM installation found.或者Could not find main class com/intelljj/idea/Main问题解决

    Pycharm双击没反应 xff0c 或者No JVM installation found 或者Could not find main class com intelljj idea Main根源之一在于破解没有成功 找到如下路劲 xff
  • 实验 详解MHA搭建过程中的遇到的各种问题

    实验 详解MHA搭建过程中的遇到的各种问题 一 MHA搭建过程中问题集合问题一 xff1a 问题二 xff1a 问题三 xff1a 问题四 xff1a 问题五 xff1a 问题六 xff1a 问题七 xff1a 问题八 xff1a 问题九
  • 【软件】使用docker尝试解决CUDA的版本与显卡不匹配

    1 CUDA的版本与显卡不匹配 参考 xff1a knavMVSNet代码复现问题解决 cuBlas call failed status 61 13问题 KyrieLiu52的博客 CSDN博客 解决方案 xff1a 1 xff09 更换
  • STM32 HAL库函数学习 I2C篇

    本篇内容讲述STM32的硬件IIC功能 硬件IIC的使用在F1系列上可能会有问题 本次使用的测试平台是H7 xff0c 用于AT24C02芯片的读写正常 xff0c 暂不清楚在其他芯片上使用是否正常 1 HAL StatusTypeDef
  • C++ 第二章 类和对象

    C 43 43 第二章 类和对象 类 c 43 43 新增了对象这个功能 xff0c 不仅有数据 xff0c 而且可以对数据进行操作的函数 Class span class token class name A span span clas
  • Apache站点中文乱码解决方案

    1 编辑apache配置文件修改以下内容 vim etc httpd conf httpd conf 查找AddDefaultCharset字段 将UTF 8修改为GBK或者GB2312重启httpd服务后 xff0c 中文显示正常 2 将
  • bat中调用vs

    https blog csdn net lixiangminghate article details 51350846
  • less文件中导入另一个less文件

    有一个common less文件 根据媒体查询 span class token punctuation span 设置不同屏幕中的html字号 屏幕划分为15等份 默认显示html字号参考750px的宽度 span class token
  • 在Nidia Xavier上使用docker遇到的问题

    在Nidia Xavier上使用docker遇到的问题 1 Xavier没有wifi模块2 在docker run gpus all时出现docker Error response from daemon OCI runtime creat
  • 【解决Anaconda3安装问题】conda --version 不是内部命令、没有script文件

    问题发现 xff1a 当我按照网上的教程安装完的时候 xff0c 到conda version出现下面错误 于是我寻求百度的帮助 xff0c 发现是环境变量的问题 但是我有点疑惑 xff0c 我按照的时候选择自动配置环境变量的 xff0c
  • 自动化测试框架有哪几种?全网最全面的总结来了

    目录 前言 什么是测试自动化框架 自动化测试框架的类型 测试自动化框架的好处 流行测试自动化框架 Robot Framework WebdriverIO Citrus Cypress Selenium Cucumber Gauge Cari
  • haproxy 基本维护命令和监控统计命令

    1服务管理命令 使用rpm包安装 xff0c 服务器管理脚本安装在 etc rc d init d haproxy xff0c 用法如下 haproxy start stop restart reload condrestart statu
  • Docker:docker操作image及container

    操作容器container 列出所有容器 docker span class token function ps span a 删除单个容器 docker span class token function rm span caec5440
  • LinuxMint新手教程3:fcitx输入法的安装与配置

    大概新手人都曾纠结过LinuxMint下的输入法配置问题 其实这个问题也挺容易的 下面我就以安装ppa源中的sogou输入法为例来为大家讲解 xff1a 安装搜狗输入法大概用如下命令就能解决了 xff1a sudo add apt repo
  • ping 原理与ICMP协议及Ping命令的过程与返回信息分析

    一 ping 原理与ICMP协议 ping 的原理 ping 程序是用来探测主机到主机之间是否可通信 xff0c 如果不能ping到某台主机 xff0c 表明不能和这台主机建立连接 ping 使用的是ICMP协议 xff0c 它发送icmp
  • [C++11] 循环引用

    前言 虽然C 43 43 11中的智能指针 xff0c 一定程度上简化了C 43 43 当中的内存管理 xff1b 但是 xff0c shared ptr lt gt 的使用同时也引出了另一个问题 xff1a 循环引用 例子 让我们先来看一
  • MyBatis Plus快速入门

    MyBatis Plus 国产的开源框架 xff0c 基于 MyBatis 核心功能就是简化 MyBatis 的开发 xff0c 提高效率 MyBatis Plus 快速上手 Spring Boot 2 3 0 43 MyBatis Plu
  • jpeg库的移植步骤(GEC6818)

    移植jpeg库 1 将jpegsrc v9a tar gz 解压到共享目录 tar zxvf jpegsrc v9a tar gz C x c z j 压缩GZ xff1a cz 解压bz2格式 xff1a xj C xff1a 指定包解压
  • NSFileManager文件和文件夹的操作

    NSFileManager的文件操作 上面中简单的介绍了数据存储 但是在获取数据 要存储时 一般需要创建一个单独的文件或者文件夹报保存你要存储的数据 所以要介绍一下NSFileManager 这个很重要 在日常开发中会经常使用到这个类 NS
  • 数组排序(C 语言实现)

    本文主要包含常见的数组排序方法 选择排序 原理 在原始数组中取未排序的首元素 xff0c 与其后方所有元素比较 xff0c 不满足顺序 xff0c 则交换首元素此时满足条件 xff0c 未排序部分后移重复上述操作 代码实现 include