几种排序方法的C语言实现

如何在 C 语言中进行选择排序? 选择排序是一种简单但效率相对较低的排序算法。它的优点是实现简单,易于理解,空间复杂度低。缺点是时间复杂度较高,在处理大规模数据时性能不佳。在实际应用中,应根据具体情况选择合适的排序算法。如果数据量较小,或者对算法的简单性要求较高,选择排序可以是一个可行的选择。但对于大规模数据的排序,通常会优先考虑更高效的排序算法,如快速排序、归并排序等。🎉相关推荐📙C 语言百万年薪修炼课程通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。🍅博客首页-关注博主🎗️带你畅游技术世界,不错过每一次成长机会! 阅读详情

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

#define SORT_ASCENDING (1)

#if SORT_ASCENDING
#define compare_num(a,b)    ((a) > (b))
#else
#define compare_num(a,b)    ((a) < (b))
#endif

#define NUM    (10)

//======================================================================================

int print_num(int data[])
{
    int n;

    for (n = 0; n < NUM; n++)
    {
        printf("%d ", data[n]);
    }
    printf("/n");
    return 0;
}

int generate_num(int data[])
{
    int n;

    for (n = 0; n < NUM; n++)
    {
        data[n] = (rand() - rand()) % 100;
    }

    print_num(data);
    return 0;
}

//======================================================================================

#define swap_num(n, i, j)    do { n[i] ^= n[j]; n[j] ^= n[i]; n[i] ^= n[j]; } while (0);

/*
 * bubble sort
 */

int bubble_sort(int data[], int num)
{
    int i, j;

    printf("%s=> ", __FUNCTION__);

    for (i = 0; i < num; i++)
    {
        for (j = i + 1; j < num; j++)
        {
            if (compare_num(data[i], data[j]))
            {
                swap_num(data, i, j);
            }
        }
    }

    print_num(data);
    return 0;
}

/*
 * select sort
 */

int select_sort(int data[], int num)
{
    int i, j, x;

    printf("%s=> ", __FUNCTION__);

    for (i = 0; i < (num - 1); i++)
    {
       x = i;
       for (j = i + 1; j < num; j++)
       {
          if (compare_num(data[j], data[x]))
          {
              x = j;
          }

       }

       if (x != i)
       {
           swap_num(data, i, x);
       }
    }

    print_num(data);
    return 0;
}

/*
 * insert sort
 */

int insert_sort(int data[], int num)
{
    int i, j;

    printf("%s=> ", __FUNCTION__);

    for (i = 1; i < num; i++)
    {
        for (j = 0; j < i; j++)
        {
            if (compare_num(data[j], data[i]))
            {
                swap_num(data, i, j);
            }
        }
    }

    print_num(data);
    return 0;
}

/*
 * quick sort
 */

int _quick_sort(int data[], int low, int high)
{
    int i, j, x;

    if (low < high)
    {
        i = low;
        j = high;
        x = data[i];

        while (i < j)
        {
            while ((i < j) && compare_num(data[j], x))
            {
                j--;
            }

            if (i < j)
            {
                data[i] = data[j];
                i++;
            }

            while ((i < j) && compare_num(x, data[i]))
            {
                i++;
            }

            if (i < j)
            {
                data[j] = data[i];
                j--;
            }
        }

        data[i] = x;
        _quick_sort(data, low, i - 1);
        _quick_sort(data, i + 1, high);
    }

    return 0;
}

int quick_sort(int data[], int num)
{
    printf("%s=> ", __FUNCTION__);
    _quick_sort(data, 0, num - 1);
    print_num(data);
    return 0;
}


//======================================================================================

int main()
{
    int data[NUM];

    generate_num(data);
    bubble_sort(data, NUM);

    generate_num(data);
    select_sort(data, NUM);

    generate_num(data);
    insert_sort(data, NUM);

    generate_num(data);
    quick_sort(data, NUM);
    return 0;
}

PS射击游戏射线检测优化:原理、工程与全链路高性能实现 射线池:减少GC,提升批量检测效率。分层检测:先粗后细,远距离射击高效判定。批量检测:并行处理,适合大量射线场景。空间结构:进一步加速大场景检测。下面继续深入射线检测优化,补充更多实用细节和进阶技巧,包括空间分区加速、射线检测多线程/异步化、射线合并与分帧、射线池通用模板、常见性能陷阱与调优建议等。对于极端性能需求,可自定义轻量级物理系统,仅检测关键对象(如玩家、子弹),跳过复杂物理引擎。结合AABB、OBB、球体等简单碰撞体,射线-包围体检测极快。空间分区+分层检测是大场景射线优化核心。 阅读详情

相关推荐

嵌入式开发也玩“全家桶”?手把手教你用CLion+PyOCD调试APM32,比OpenOCD更简单

本文详细介绍了如何使用CLion和PyOCD组合进行APM32嵌入式开发,提供从环境配置到实战调试的完整指南。相比传统工具如Keil和OpenOCD,这套方案更轻量、易用,特别适合现代开发者需求,涵盖CMake配置、PyOCD调试技巧及常见问题解决。

weixin_42543046的博客 464

C语言--5种基本排序方法

基本排序冒泡排序选择排序插入排序归并排序递归非递归sort替换merge快速排序 冒泡排序 int main() { int a[10] = {3,1,4,5,6}; for(int i = 1; i <= 4; i++) { //进行n-1趟 //第i趟时从 a[0] 到 a[n-i-1] 都与它们下一个数比较 for(int j = 0; j < 5-i; j++) ...

watermelon_lily的博客 1130

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 660

数据结构之八种排序(c语言)

8种排序的时间复杂度和稳定性 排序方法 平均情况 最坏情况 最好情况 稳定性 1.冒泡排序 N^2 N^2 n 稳定 2.选择排序 N ...

祈心无尘的博客 959

HexView 脚本自动化工具:从刷写文件处理到批量转换实战

本文详细介绍了如何利用HexView脚本自动化工具高效处理嵌入式刷写文件。通过实战演示,文章展示了如何使用bat脚本实现S19、HEX等格式文件的剪切、填充、合并与批量转换,构建自动化流水线,从而显著提升汽车电子等领域的开发与生产效率。

weixin_29237635的博客 356

彩票预测的可能性与算法分析

彩票作为一种以随机数为基础的赌博形式,吸引了大量希望一夜暴富的参与者。尽管许多人希望通过某种方式预测彩票结果,以增加中奖几率,但彩票预测的可能性依然是一个充满争议和误解的话题。本文将探讨彩票是否能够预测的理论依据,分析可能的预测算法,并解释这些算法为何在实际应用中难以奏效。

m0_38012434的博客 2万+

C语言常见的排序方法

文章目录前言一、冒泡法二、选择法 前言 本文介绍的两种排序方法是冒泡法和选择法,以10个数为例。 提示:以下是本篇文章正文内容是根据谭浩强的《C程序设计》内容。 一、冒泡法 冒泡法顾名思义就是每一趟比较,把最大的数“沉底”,最小的数自然而然会冒上来。 思路:如果有n个数,则要进行n-1趟比较。 在第一趟比较中要进行n-1次两两比较; 在第j趟比较中,要进行n-j两两比较。 代码如下(示例): #include <stdio.h> int main(void) { int i, a[1..

weixin_43772611的博客 1921

华为MA5620配置宽带及语音实例

华为EPON配置实例1、公共部分和宽带PPPOE部分用串口用户名密码root/mduadminMA5620E>enableMA5620E#configMA5620E(config)#MA5620E(config)#sysnamebigcow/给设备起名字/****之前为公共部一、建vlan和地址bigcow(config)#vlan100...

weixin_33862041的博客 6347

C语言几种排序算法

1、选择排序 思路:依次选出数组最小的数放到数组的前面。首先第一个元素与后面的所有比较,找出最小的,放入数组第一个;接着第二个与后面所有比较,找出最小放入第二个;依次类推。 代码实现 #include <stdio.h> //print void printbuf(int* buf,int buflen) { for(int i = 0; i < buflen; i++) { printf("%d\t",buf[i]); } printf("\n");

weixin_44105987的博客 979

工业金属表面缺陷检测:4种光学成像方案(明/暗/漫/背光)选型与实测对比

本文深入探讨工业金属表面缺陷检测中的4种光学成像方案(明/暗/漫/背光),详细解析其物理原理、适用场景及实测效果。通过对比不同照明方案在铝合金轮毂、不锈钢餐具等实际工业场景中的表现,提供科学的选型决策树,帮助提升缺陷检出率至99%以上,为计算机视觉在工业质检领域的应用提供实用指南。

weixin_33624741的博客 388

UniApp消息推送进阶:不用插件实现动态语音播报(含保活策略)

本文详细介绍了在UniApp中实现动态语音播报的进阶方案,无需依赖第三方插件。核心采用透传消息传递动态数据,结合本地TTS引擎合成语音,并针对不同安卓厂商提供了深度通道配置与差异化保活策略,有效解决了App退至后台或被清理后语音播报失效的难题。

weixin_29224309的博客 487

排字典顺序排序(c语言)

输入下述8个国家名字的字符串:CHINA、JAPAN、KOREA、INDIA、CANADA、AMERICAN、ENGLAND和FRANCE,将这些国名按字典顺序排序。     #include #include   void main() {        charstr[8][9]={"CHINA","JAPAN","KOREA","INDIA","CANADA","AMERIC

pengzhaoyang100的专栏 3万+

后仿真中《SDF反标必懂连载篇》之 探究 SDF延迟精度 与 timescale 精度问题

本篇文章,同样属于后仿真中的SDF反标系列文章内容之一。今天,将前仿真中的timescale 和 后仿真中 timescale+sdf 延迟数据,进行贯通讲解。不要忽视这部分内容,因为后仿真的成功准确与否,时间精度问题,很重要。为什么?接下来一一讲解。

那么菜的博客 2310

C语言实现几种常见排序方法

首先将待排序序列建立成大根堆(或小根堆),然后将根节点与最后一个节点交换位置,这时候最后一个节点已经是有序的了,再对剩余部分的序列进行堆化,得到新的根节点,再将根节点与倒数第二个节点交换位置,以此类推,不断缩小排序范围,直到整个序列有序。桶排序是一种常用的排序算法,它需要根据数据的特点构建若干个桶,将数据分配到相应的桶中并对每个桶中的数据进行排序,最后按照桶的顺序依次输出所有数据。在桶排序过程中,需要将待排序序列分配到若干个桶中,然后对每个桶中的数据进行排序,最后按照桶的顺序依次输出所有数据。

weixin_62774747的博客 3794

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据排序的几种方法(c语言实现)

/* 功能:用以下几种方法实现c语言中的常用排序 */ #include "stdio.h" void select_Sort1(int a[],int n); void select_Sort2(int a[],int n); void bubble_Sort(int a[],int n); void insert_Sort(int a[],int n); void quick_Sort(

小塔博客 4730

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

几种常见的排序方法(C语言实现)

#include <stdio.h> #include <stdlib.h> #include <Windows.h> //直接插入排序 void InsertSort(int arry[], int n) { int i, j; int temp;//临时变量 for (i = 1; i < n;...

187

几种排序方法的实现 (C语言)

很想把数据结构中的程序都自己写一遍:这里是排序算法的程序,但是只写了一点点,还没有完全写好,等写好了再来改,最近很忙,感觉很忙,很多课程都要交报告,加上我编写代码的能力简直逊的要死......唉,悲啊...但我要慢慢学着写程序,一点一点来,真的不想让那些真心帮助过我的人失望, 不想让你们失望。觉得人生命的一半多不是在为自己活着...  呵呵,但是感觉是开心的. 有一天你看到我成

wangjiaoni的专栏 1263

简单的几种排序方法(C语言)

#include <stdio.h> //希尔排序 void shellsort(int a[], int n) { int j; int d = n; while (d > 1) { d = d / 2; for (int x = 0; x < d; x++) { for (int i = x + d; i < n; i = i + d) { int temp = a[i]; for (j = i - d; j > -1 &amp

weixin_48396711的博客 639

C语言数据结构--排序之直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序和堆排序

代码前面的声明: #include <stdio.h> #include <stdlib.h> #include <time.h> //顺序表我是随机生成的伪随机数,引入time.h头文件 #define MAXSIZE 20 //顺序表的最大长度 #define EQ(a,b) ((a) == (b)) //a = b #define LT(a,b) ((a) < (b))//a<b #define LQ(a,b) ((a) <= (b))/a&lt

别下完这场雪 2340

江哥带你玩转C语言 | 11- C语言排序算法

计数排序(Counting Sort) 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,快于任何比较排序算法。 排序思路: 1.找出待排序数组最大值 2.定义一个索引最大值为待排序数组最大值的数组 3.遍历待排序数组, 将待排序数组遍历到的值作新数组索引 4.在新数组对应索引存储值原有基础上+1 简单代码实现: int main() { // 待排序数组 int nums[5] =

李南江 1169

C语言进阶——基于数组的排序

普通选择排序 1、实现原理和思想(升序): 1)在未排序的数组中,选择首元素与其后元素进行比较,若其后元素比首元素大,则两元素交换,直至比较到最后一个元素,这是第一轮比较,得到首元素有序。 2)接下来从第2个,第3个元素…重复1)的步骤,直至剩下最后一个元素,则最后一个元素也是有序,是本组元素的最大值。 #include&lt;stdio.h&gt; #include&lt;stdli...

moyu的博客 491

常见的排序算法——C语言实现

以下是几种常见的排序算法的C语言实现。

m0_46464899的博客 159

C语言常用排序方法大全

C语言常用排序方法大全 /* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和...

weixin_34357436的博客 108

C语言中三种常见排序算法分析

C语言中三种常见排序算法分析 一、冒泡法(起泡法)  算法要求:用起泡法对10个整数按升序排序。     算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。     算法源代码: # include

夜色如墨 942

c语言四大排序

#include void bubble_sort(int* a,int num); void select_sort(int* a,int num); void select_sort_2(int* a,int num); void insert_sort_1(int* a,int num); void insert_sort_2(int* a,int num); void quic

it_fan7的博客 563
上一篇: 加减乘除算24的C代码
下一篇: 根据结构体某一成员的地址得到该结构体变量的首地址
blh
blh
博客等级 码龄26年 96粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值