我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言中有哪些简单的排序算法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言中有哪些简单的排序算法

这篇文章主要介绍“C语言中有哪些简单的排序算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中有哪些简单的排序算法”文章能帮助大家解决问题。

    1.冒泡排序(Bubble Sort)

    基本思想:

    冒泡排序是一个非常好理解的排序,顾名思义——冒泡,此时将要排序的数据从上至下排列,从最上面的数(第一个数据)开始对相邻的两个数据进行比较,较小的数据往上浮,较大的数据往下沉,达到排序的效果。

    (1)对每一对相邻的元素进行比较,若第一个比第二个大,则调换这两个元素的位置,依次两两比较直到数据的最后一对,此为一轮操作。

    (2)重复n轮此操作(n为元素的个数),不过每轮结束后的最后一个元素不用参与下一轮的比较,因为经历一轮排序后,最后一个元素一定比前面所有的元素都要大。

    (3)因此每一轮需要比较的元素都在减少,一直到没有数可比较为止。(不过为了减少比较次数,可以记录每轮是否有数据的交换,如果没有交换,表明当前数据已经按从小到大的顺序拍好了,可直接跳出循环)

    代码实现:

    #include<stdio.h> int main() {int n, m, i, j, temp;int arr[100]; scanf_s("%d", &n);    //scnaf_s是更为安全的输入方式;n为元素的个数;for (i = 0; i < n; i++) {scanf_s("%d", &arr[i]);    //输入数据;} m = n;            //因为每进行一次第一轮循环,需要排序的数据都要“--”,因此定义变量m=n;for (i = 0; i < n; i++) {int exchange = 0;           //记录这一轮会不会有数据的交换;for (j = 0; j < m-1; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;exchange = 1;}}m--;if (!exchange)  //若没有数据的交换,则数据已经排列完毕,跳出循环;break;}for (i = 0; i < n; i++) {printf("%d ", arr[i]);        //输出} return 0; }

    2.快速排序(Quick Sort)

    快速排序是这五类中平均性能最优的排序算法,其中运用了分治的思想,并且调用了递归函数,因此也是这五类中最难的一个。

    基本思想:

    快速排序的重点在于找一个基准值,将数列分为两部分&mdash;&mdash;大于基准值的放在右边,小于基准值的 放在左边。然后分别对这两部分重复次操作,一分为二,二分为四&middot;&middot;&middot;&middot;&middot;&middot;直到每个元素自成一部分。

    将数据的中间元素设为基准值,初始化令  指向最左边个元素,令  指向最右边个元素,通过从左往右找一个大于基准数的数,通过从右往左找一个小于基准数的数,交换两数的位置,直到。

    如此不断的细分递归,达到排序的目的

    代码实现:

    #include<stdio.h> void Quicksort(int a[], int left, int right) {   //快排函数    int temp;    int mid = a[(left + right) / 2];            //找基准值    int i = left;    int j = right;//在左侧找一个大于基准值的数,在右侧找一个小于基准数的数,然后交换位置    while (i <= j) {           while (a[i] < mid) i++;        while (a[j] > mid) j--;        if (i <= j) {            temp = a[i];            a[i] = a[j];            a[j] = temp;            i++;            j--;        }    }    if (i < right) Quicksort(a, i, right);        //递归    if (j > left) Quicksort(a, left, j);           //递归} int main() {    int n, m, i;    int arr[100];    scanf_s("%d", &n);    for (i = 0; i < n; i++) {        scanf_s("%d", &arr[i]);                        //输入    }     Quicksort(arr, 0, n - 1);                        //调用函数     for (i = 0; i < n; i++) {        printf("%d ", arr[i]);                        //输出    }    return 0;}

    3.插入排序(Insertion Sort)

    基本思想:

    将数据分为两组&mdash;&mdash;一组是有序的,一组是无序的,将无序数据中的元素依次插入到有序数据中,从而将整个数据变为有序的(这里的分组是潜意识的,实际上并不会用两个数组来分)

    初始时,将第一个元素分为有序组(因为只有一个元素,所以认为它是排好序的),其余元素分为无序组

    因此只需从第二个元素开始,依次在有序组中找到自己的位置,插入即可,直到最后一个元素。

    但这并不意味着只需要一次循环,因为在“找自己的位置”的过程中,需要将自己与前面的元素相比较,若是自己较小,则将那个元素后移一位;若是自己较大,则将自己插入到上一次比较的位置

    代码实现:

    #include<stdio.h> int main() {    int n, m, i, j, temp;    int arr[100];     scanf_s("%d", &n);    for (i = 0; i < n; i++) {        scanf_s("%d", &arr[i]);                        //输入     }    for(i=1; i<n; i++)                                //从无序组的第一个元素开始         if(arr[i] < arr[i-1])                           // 判断是否要向前寻找插入的位置         {            int temp = arr[i];                                   for(j=i-1; j>=0 && arr[j]>temp; j--)    //将大于自己的数依次向后挪位                 arr[j+1] = arr[j];                                arr[j+1] = temp;                       //插入         }    for (i = 0; i < n; i++) {        printf("%d ", arr[i]);                        //输出     }    return 0;}

    4.简单选择排序(Simple Selection Sort)

    基本思想:

    设一个数据集有n个元素,选择这n个元素中最小的一个与第一个元素交换位置,再在剩下的n-1个元素中选择最小的一个与第二个元素交换位置,直到在最后两个元素中选择最小的一个放在倒数第二的位置上,排序完成。

    代码实现:

    #include<stdio.h> int main() {    int n, m, i, j, p, temp;    int arr[100];     scanf_s("%d", &n);    for (i = 0; i < n; i++) {        scanf_s("%d", &arr[i]);                        //输入     }     for (i = 0; i < n - 1; i++) {        p = i;                            //p用于记录最小元素的下标        for (j = i + 1; j < n; j++) {       //找到剩下元素中最小的那一个            if (arr[p] > arr[j])                p = j;        }        temp = arr[i];                        //temp是交换两数时的中间变量        arr[i] = arr[p];        arr[p] = temp;    }    for (i = 0; i < n; i++) {        printf("%d ", arr[i]);                        //输出     }    return 0;}

    5.希尔排序(Shell Sort)

    希尔排序是插入排序的优化,它先将待排序列进行预排序,然后对次序列进行一次插入排序,不一样的是经过预处理之后的插入排序时间复杂度为

    基本思想:

    定义一个间隔gap,在一组数据中,将相隔为gap的元素作为一个组,对组内元素执行简单的插入排序,然后不断缩小gap重复此操作,完成数据的预处理,直到gap=1,表示对所有数进行插入排序,算法终止。

    初始化(n为元素个数),将数据中所有距离为gap的元素分在一组(此时这组数据会被分成个组,每组有两个元素,对每个组进行排序)

    接着缩小gap至,将数据中所有距离为gap的元素分在一组(此时这组数据会被分成个组,每组有四个元素,对每个组进行排序)

    重复直到gap=1,此时数据为一组,有n个元素,简单插入排序即可。

    代码实现:

    #include<stdio.h> int main() {    int n, m, i, j, temp,gap;    int arr[100];     scanf("%d", &n);    for (i = 0; i < n; i++) {        scanf("%d", &arr[i]);                        //输入    }     for(gap=n/2; gap>0; gap/=2)        for(i=gap; i<n; i++)            for(j=i-gap; j>=0 && arr[j]>arr[j+gap]; j-=gap){                temp=arr[j];                arr[j]=arr[j+gap];                arr[j+gap]=temp;            }    for (i = 0; i < n; i++) {        printf("%d ", arr[i]);                        //输出    }    return 0;}

    关于“C语言中有哪些简单的排序算法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    C语言中有哪些简单的排序算法

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    C语言中有哪些简单的排序算法

    这篇文章主要介绍“C语言中有哪些简单的排序算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中有哪些简单的排序算法”文章能帮助大家解决问题。1.冒泡排序(Bubble Sort)基本思想:冒泡
    2023-07-05

    c语言中有哪些排序的方法

    这期内容当中小编将会给大家带来有关c语言中有哪些排序的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、选择排序-简单选择排序选择排序是最简单的一种基于O(n2)时间复杂度的排序算法,基本思想是从i=
    2023-06-20

    C#中有哪些排序算法

    这期内容当中小编将会给大家带来有关C#中有哪些排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#排序算法之冒泡排序 一下是C#开发出冒泡排序算法。希望能为C#语言的学习者带来一些益处。不要忘了
    2023-06-17

    C#排序算法有哪些

    C#排序算法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#排序算法一、冒泡排序(Bubble)using System; namespace BubbleSort
    2023-06-17

    C语言数据结构与算法排序的方法有哪些

    这篇文章主要介绍“C语言数据结构与算法排序的方法有哪些”,在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言数据结构与算法排序的方法有哪些”的疑
    2023-06-22

    c语言冒泡法排序法的优势有哪些

    冒泡排序是一种简单直观的排序算法,它的优势主要包括以下几点:实现简单:冒泡排序的实现非常简单,只需要比较相邻的两个元素并交换位置,因此易于理解和实现。不需要额外的存储空间:冒泡排序是一种原地排序算法,不需要额外的存储空间。稳定性:冒泡排序是
    c语言冒泡法排序法的优势有哪些
    2024-03-05

    c++常用的排序算法有哪些

    小编给大家分享一下c++常用的排序算法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c++常用的排序算法//选择排序法SelectionSort(int a
    2023-06-03

    C语言中排序算法怎么用

    这篇文章主要为大家展示了“C语言中排序算法怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中排序算法怎么用”这篇文章吧。排序的概念及其运用排序的概念排序:所谓排序,就是使一串记录,按照
    2023-06-29

    c语言中算法的特点有哪些

    C语言中算法的特点包括:1. 可移植性:C语言是一种高级语言,其代码可以在不同的平台上进行编译和运行,具有良好的可移植性。2. 效率高:C语言是一种底层语言,它直接操作计算机的硬件资源,能够充分利用计算机的性能,具有较高的执行效率。3. 灵
    2023-09-11

    Python中的排序算法有哪些?

    Python中常用的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。下面将分别介绍这些排序算法的原理,并给出相应的代码示例。冒泡排序:冒泡排序是一种简单直观的排序算法。它重复地遍历要排序的列表,比较相邻两个元素大小,并
    2023-10-22

    c语言中有哪些运算

    c语言支持算术、比较、逻辑、位运算和赋值运算。按照优先级由高到低依次执行:圆括号、单目运算符、乘除取余、加减、比较、赋值、逻辑与、逻辑或、逗号。C 语言中的运算C 语言支持多种类型的运算,包括:算术运算加法 (+)减法 (-)乘法
    c语言中有哪些运算
    2024-05-10

    java的排序算法有哪些

    这篇文章主要介绍“java的排序算法有哪些”,在日常操作中,相信很多人在java的排序算法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java的排序算法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
    2023-07-02

    Java中都有哪些排序算法

    今天就跟大家聊聊有关Java中都有哪些排序算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。排序

    2023-06-02

    Python中都有哪些排序算法

    今天就跟大家聊聊有关Python中都有哪些排序算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.冒泡排序冒泡排序是 CS 入门课程中最常讲授的一种,因为它清楚地说明了排序的工作
    2023-06-16

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录