iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中有哪些简单的排序算法
  • 735
分享到

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

2023-07-05 19:07:01 735人浏览 泡泡鱼
摘要

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

这篇文章主要介绍“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语言中有哪些简单的排序算法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: C语言中有哪些简单的排序算法

    本文链接: https://www.lsjlt.com/news/354617.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

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

    下载Word文档
    猜你喜欢
    • C语言中有哪些简单的排序算法
      这篇文章主要介绍“C语言中有哪些简单的排序算法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中有哪些简单的排序算法”文章能帮助大家解决问题。1.冒泡排序(Bubble Sort)基本思想:冒泡...
      99+
      2023-07-05
    • c语言中有哪些排序的方法
      这期内容当中小编将会给大家带来有关c语言中有哪些排序的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、选择排序-简单选择排序选择排序是最简单的一种基于O(n2)时间复杂度的排序算法,基本思想是从i=...
      99+
      2023-06-20
    • C#中有哪些排序算法
      这期内容当中小编将会给大家带来有关C#中有哪些排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#排序算法之冒泡排序   一下是C#开发出冒泡排序算法。希望能为C#语言的学习者带...
      99+
      2023-06-17
    • C#排序算法有哪些
      C#排序算法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#排序算法一、冒泡排序(Bubble)using System;   ...
      99+
      2023-06-17
    • C语言数据结构与算法排序的方法有哪些
      这篇文章主要介绍“C语言数据结构与算法排序的方法有哪些”,在日常操作中,相信很多人在C语言数据结构与算法排序的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言数据结构与算法排序的方法有哪些”的疑...
      99+
      2023-06-22
    • C语言非数值计算的常用经典排序算法有哪些
      这篇文章主要讲解了“C语言非数值计算的常用经典排序算法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言非数值计算的常用经典排序算法有哪些”吧!排序...
      99+
      2024-04-02
    • c语言冒泡法排序法的优势有哪些
      冒泡排序是一种简单直观的排序算法,它的优势主要包括以下几点: 实现简单:冒泡排序的实现非常简单,只需要比较相邻的两个元素并交换位...
      99+
      2024-03-05
      c语言
    • c++常用的排序算法有哪些
      小编给大家分享一下c++常用的排序算法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c++常用的排序算法//选择排序法SelectionSort(int a...
      99+
      2023-06-03
    • C++数组排序算法有哪些
      本篇内容主要讲解“C++数组排序算法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++数组排序算法有哪些”吧!三种简单排序1:选择排序(从小到达)从第一...
      99+
      2024-04-02
    • C语言中排序算法怎么用
      这篇文章主要为大家展示了“C语言中排序算法怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中排序算法怎么用”这篇文章吧。排序的概念及其运用排序的概念排序:所谓排序,就是使一串记录,按照...
      99+
      2023-06-29
    • C语言实现单链表的快速排序算法
      目录背景设计思路算法主要步骤快速排序算法实现整个程序源代码测试案例总结背景 传统QuickSort算法最大不足之处在于,由于其基于可索引存储结构设计(一般为数组或索引表),因而无法用...
      99+
      2024-04-02
    • Python中的排序算法有哪些?
      Python中常用的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。下面将分别介绍这些排序算法的原理,并给出相应的代码示例。冒泡排序:冒泡排序是一种简单直观的排序算法。它重复地遍历要排序的列表,比较相邻两个元素大小,并...
      99+
      2023-10-22
      算法 Python 排序算法 排序算法的关键词:
    • C语言常见排序算法归并排序
      目录前言 一、归并排序1.1 基本思想1.2 算法思想1.3 程序设计思想1.4 程序实现1.5 归并排序的特性总结前言 本期为大家带来的是常见排序算法中的归并排序,博主在...
      99+
      2024-04-02
    • JavaScript中有哪些排序算法
      这期内容当中小编将会给大家带来有关JavaScript中有哪些排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。说明&middot;  每个浏览器测...
      99+
      2024-04-02
    • c语言中算法的特点有哪些
      C语言中算法的特点包括:1. 可移植性:C语言是一种高级语言,其代码可以在不同的平台上进行编译和运行,具有良好的可移植性。2. 效率...
      99+
      2023-09-11
      c语言
    • 有哪些排序算法
      有哪些排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.插入排序—直接插入排序(Straight Insertion Sort)基本思想:将一个记录插入...
      99+
      2023-06-15
    • C语言中冒泡排序算法详解
      目录一、算法描述二、算法分析三、完整代码总结一、算法描述 比较相邻两个元素,如果第一个比第二个大则交换两个值。遍历所有的元素,每一次都会将未排序序列中最大的元素放在后面。假设数组有 ...
      99+
      2024-04-02
    • c/c++基础简单易懂的快速排序算法
      快速排序就是找一个基准,然后其左边要比他小,右边要比他大 int partition(int* a, int left, int right) { int pivot = le...
      99+
      2024-04-02
    • java的排序算法有哪些
      这篇文章主要介绍“java的排序算法有哪些”,在日常操作中,相信很多人在java的排序算法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java的排序算法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
      99+
      2023-07-02
    • c语言中有哪些运算
      c语言支持算术、比较、逻辑、位运算和赋值运算。按照优先级由高到低依次执行:圆括号、单目运算符、乘除取余、加减、比较、赋值、逻辑与、逻辑或、逗号。 C 语言中的运算 C 语言支持多种类型...
      99+
      2024-05-10
      c语言
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作