C语言经典算法实例3:数组元素排序

简介: C语言经典算法实例3:数组元素排序

0c254b9b970f4ff6877189780c74f70d.jpg

一、问题描述


求数组的排序

问题的描述

如下几点所示


  1. 使用rand()库函数随机生成10个1-100之间的数字。
  2. 声明数组的大小为10。
  3. 随机生成的10个数字赋值给数组。
  4. 给数组内的元素由小到大排序。


二、算法实例编译环境


本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019


c8aa40ece86245138e0fbd3b1a9dbd86.png



879f8137cdd3408fb9171160a095eef1.png


Visual Studio 2019官网链接如下

Visual Studio 2019官网链接


5f3d0faf855a49e5b354fc888a2f32cf.png



Visual Studio 2019集成的开发环境的特点有


Visual Studio 2019默认安装Live Share代码协作服务。

帮助用户快速编写代码的新欢迎窗口、改进搜索功能、总体性能改进。

Visual Studio IntelliCode AI帮助。

更好的Python虚拟和Conda支持。

以及对包括WinForms和WPF在内的.NET Core 3.0项目支持等。


三、算法实例实现过程


3.1、包含头文件


包含头文件 代码如下所示


#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10    // 定义宏


  • 将要用到的C语言头文件包含近年来。


3.2、定义宏和声明数组


定义宏和声明数组 代码如下所示

  #define MAX 10    // 定义宏
    int myArr[MAX];     // 定义数组变量


  • 定义了MAX ,代表了MAX 为常数10。
  • 声明了数组myArr。


3.3、声明相关变量


声明相关变量 代码如下所示

int i, j, tempVal;  // 定义变量


  • 声明相关变量i, j, tempVal。


3.3、随机生成十个数字赋值给数组


随机生成十个数字赋值给数组 代码如下所示

   /// <summary>
    /// 随机生成十个数字赋值给数组
    /// </summary>
    /// <returns></returns>
    srand(time(NULL));
    for (i = 0; i < 10; i++)
    {
        myArr[i] = rand() % 100 + 1;
    }


  • srand(time(NULL))可以保证每一次生成的数字都不同。
  • 通过循环,将随机生成十个数字赋值给数组



bf0fee6f79014031bee6b45f6b0a4d4a.jpg


3.4、输出随机生成的十个数字


输出随机生成的十个数字 代码如下所示


   /// <summary>
    /// 输出随机生成的十个数字
    /// </summary>
    /// <returns></returns>
    printf("The ten randomly generated numbers are as follows\n");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", myArr[i]);
    }
    printf("\n");


  • 输出 我们向数组中输入的数据。

按F5进行编译,调试结果如下所示。

aab367ecdc77458a92cce4e94a5a27be.png


  • 可以正确的输出随机生成的数字,存储于数组中的数据。


3.5、数组从小到大进行排序


数组从小到大进行排序 代码如下所示


   /// <summary>
    ///  数组从小到大进行排序
    /// </summary>
    /// <returns></returns>
    for (j = 0; j < 10; j++)
    {
        for (i = 0; i < 9 - j; i++)
        {
            if (myArr[i] > myArr[i + 1])
            {
                tempVal = myArr[i];
                myArr[i] = myArr[i + 1];
                myArr[i + 1] = tempVal;
            }
        }
    }


  • 数组的排序方式为从小到大
  • 采用的排序方式为冒泡排序


3.6、输出数组元素排序好的数字


输出数组元素排序好的数字 代码如下所示

 /// <summary>
    /// 输出数组元素排序好的数字
    /// </summary>
    /// <returns></returns>
    printf("\nThe ten randomly generated numbers are sorted from smallest to largest as follows\n");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", myArr[i]);
    }
    printf("\n\n");
  • 可以输出排序好的数字。
  • 数字存储于数字之中。

按F5进行编译,调试结果如下所示。

ba9aefb8aee64732876bc5afa269db1d.png


The ten randomly generated numbers are as follows
78 95 27 65 62 83 19 74 8 90
The ten randomly generated numbers are sorted from smallest to largest as follows
8 19 27 62 65 74 78 83 90 95
请按任意键继续. . .
  • 可以看做数字是从小到大排序输出的。
  • 排序算法符合要求。


四、经典算法实例程序 完整代码

经典算法实例程序完整代码如下所示


4.1、main.h文件

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10    // 定义宏


4.2、main.c文件

#define _CRT_SECURE_NO_WARNINGS
#include "Main.h"
int main()
{
    system("color 3E");
    int myArr[MAX];     // 定义数组变量
    int i, j, tempVal;  // 定义变量
    /// <summary>
    /// 随机生成十个数字赋值给数组
    /// </summary>
    /// <returns></returns>
    srand(time(NULL));
    for (i = 0; i < 10; i++)
    {
        myArr[i] = rand() % 100 + 1;
    }
    /// <summary>
    /// 输出随机生成的十个数字
    /// </summary>
    /// <returns></returns>
    printf("The ten randomly generated numbers are as follows\n");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", myArr[i]);
    }
    printf("\n");
    /// <summary>
    ///  数组从小到大进行排序
    /// </summary>
    /// <returns></returns>
    for (j = 0; j < 10; j++)
    {
        for (i = 0; i < 9 - j; i++)
        {
            if (myArr[i] > myArr[i + 1])
            {
                tempVal = myArr[i];
                myArr[i] = myArr[i + 1];
                myArr[i + 1] = tempVal;
            }
        }
    }
    /// <summary>
    /// 输出数组元素排序好的数字
    /// </summary>
    /// <returns></returns>
    printf("\nThe ten randomly generated numbers are sorted from smallest to largest as follows\n");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", myArr[i]);
    }
    printf("\n\n");
    system("pause");
    return 0;
}


五、总结


C语言经典算法实例:数组元素排序,要实现的目标如下和要点如下


  1. 使用rand()库函数随机生成10个1-100之间的数字。
  2. 声明数组的大小为10。
  3. 随机生成的10个数字赋值给数组。
  4. 给数组内的元素由小到大排序。
  5. 排序方式为冒泡排序方式。

19a19bd47c9e4dd08cb82d7fc690820e.jpg


文到这里就结束啦。

希望本文的C语言经典算法实例:数组元素排序。

能激发你对C语言以及算法学习的热爱。

相关文章
|
7天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
31 4
|
16天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
63 8
|
16天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
54 7
|
1月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
37 6
|
1月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
8天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
16天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
18天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
18天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
下一篇
无影云桌面