C语言期末考试必备模板:排序法(初学者适用)(冒泡、选择)_排序模板-程序员宅基地

技术标签: 学习分享  c语言  Powered by 金山文档  开发语言  

对于c语言循环方面的题型,会涉及到两种排序方法,以下为我所总结的模板和笔记供大家学习:

一、冒泡排序法:

原理:从a[0]开始从左向右比较,然后按照要求,最终符合的数会在最后一个冒泡,然后又从第一个(a[1])数开始向右相邻比较,然后符合的数据在倒数第二的冒泡,依此类推。

对于冒泡排序法,我们将这个方法分为以下步骤:

①明确排序的对象为多少个

②构建双重循环

③完成输出

程序模板如下:

    #include <stdio.h>
    int main()
    {
        //定义需要的元素个数
        int n;
        scanf("%d",&n);
        int a[n];
        //输入对应个数的元素
        for(int i = 0;i < n;i++)
        {
            scanf("%d",&a[i]);
        }
        //双重循环进行比较:
        for(int i = 0;i < n - 1;i++)     //需要比较的次数为n - 1次
        {
            for(int j = 0;j < n - 1 - i;j++)   //数组中对应的数比较的次数为n - 1 - i
            {
                if(a[j] < a[j + 1])       //此为降序排列 升序同理
                {
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        }
        //输出结果:
        for(int i = 0;i < n;i++)
        {
            printf("%d ",a[i]);
        }
        return 0;
    }

二、选择排序法:

原理(升序):有10个元素a[0]-a[9],将a[0]与a[1]到a[9]的数都进行比较,如果a[0]比a[1]到a[9]都小,则不进行任何操作。若a[1]-a[9]中有比a[0]小的,则让最小的一个与a[1]交换,此时a[1]就为10个数中最小的一个。a[1]的比较同理,以此类推。

程序如下:

#include <stdio.h>
int main()
{
    //定义需要的元素个数
    int n;
    scanf("%d",&n);
    int a[n];
    //输入对应个数的元素
    for(int i = 0;i < n;i++)
    {
        scanf("%d",&a[i]);
    }
    //双重循环进行比较:
    for(int i = 0;i < n - 1;i++)     //需要比较的次数为n - 1次
    {
        for(int j = i + 1;j < n;j++)     //数组中对应的数只会与角标比他大的数比
        {
            if(a[i] < a[j])      //此为降序排列 升序同理
            {
                int t = a[j];
                a[j] = a[i];
                a[i] = t;
            }
        }
    }
    //输出结果:
    for(int i = 0;i < n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

可以看出:两个排序方法最根本的差异是双重循环部分:

冒泡排序法:外层循环要循环n - 1次 —— 要进行n - 1次比较,最后剩的那个数不需要比较

内层循环要循环n - 1 - i次 ——确定后的数不需要再进行比较

根据原理,互换值的是相邻的两个数

选择排序法:外层循环要循环n - 1次 —— 要进行n - 1次比较,最后剩的那个数不需要比较

内层循环根据原理,每个数只会与他之后的数比较,符合要求的值互换,角标不变。所以从 i + 1开始比较,直到与最后一个数比较完成

根据原理,互换值的是相比较的两个数,一个用的a[i]来记录与每个数比较的那一个数,用 a[j]记录被比较的数,所以是这两者彼此互换数值,区别于冒泡排序的相邻替换

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_74996125/article/details/128653194

智能推荐

Sublime text 3搭建Python开发环境及常用插件安装_sublime python 环境搭建-程序员宅基地

文章浏览阅读4.9k次。Sublime text 3搭建Python开发环境及常用插件安装_sublime python 环境搭建

在CentOS 7上安装MySQL 8.0_centos7安装mysql8.0gpg密钥-程序员宅基地

文章浏览阅读643次。MySQL在首次安装后会执行一个安全脚本,用于设置root用户的密码以及其他安全选项。_centos7安装mysql8.0gpg密钥

echarts绘制圆角方形进度图_echarts symbolboundingdata-程序员宅基地

文章浏览阅读864次。这种场景下,可以使用两个系列,一个系列是完整的图形,当做『背景』来表达总数值,另一个系列是使用 `symbolClip` 进行剪裁过的图形,表达当前数值。_echarts symbolboundingdata

学python需要什么样的电脑,python需要什么样的电脑_python机器学习需要怎样配置的电脑-程序员宅基地

文章浏览阅读1k次,点赞18次,收藏16次。这篇文章主要介绍了学python对电脑配置要求高吗,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。_python机器学习需要怎样配置的电脑

最新OCR开源神器来了!-程序员宅基地

文章浏览阅读3.9k次。Datawhale开源开源方向:OCR开源项目01导读OCR方向的工程师,之前一定听说过PaddleOCR这个项目,其主要推荐的PP-OCR算法更是被国内外企业开发者广泛应用,短短半年..._github 2023年最新表格ocr

python 建筑建模_设计课开题 | Parameterized Complexities参数化建筑设计-程序员宅基地

文章浏览阅读317次。【竞赛+作品集,点燃你的设计理想】设计课开题啦!百川柯纳陆续推出以国际设计竞赛项目为参考的设计题目让大家参与,借此丰富履历,充实作品集。本期的设计题目为:Parameterized Complexities参数化建筑设计。喜欢参数化的小伙伴,你们兴奋吗?Parameterized Complexities 选题背景 近期不断有小伙伴在后台给我们留言,或者咨询百川柯纳顾问老师表达希望能够参加以“参数..._python 建筑平面图

随便推点

PPT模板下载-程序员宅基地

文章浏览阅读134次。300多个各种类型的PPT模板下载,为您提供各种类型PPT模板、PPT图片、PPT素材、海报模板、新媒体配图等内容下载。

基于JAVA的智能小区物业管理系统【数据库设计、源码、开题报告】_智能化哪些系统需要数据库-程序员宅基地

文章浏览阅读546次。主要功能有:保安保洁管理、报修管理、房产信息管理、公告管理、管理员信息管理、业主信息管理、登录管理。_智能化哪些系统需要数据库

年度书单盘点 | 实用到爆炸,这份高性价比套系书单,越读越上头!-程序员宅基地

文章浏览阅读69次。本期年度书单,带大家盘点一下本年度图灵最受欢迎的套装图书,以前买套装书是为了凑单,如今套装书买回去不仅有一次性就能读完的酣畅感还极具收藏价值。一本好书往往要经过时间的验证,而阅读又是一种隐私,每个人的喜好大有不同,但能够集齐每个人的喜爱,这往往就是经典的诞生。今天这份书单里,有自成体系的套系书,还有一些因读者需求而产生的组成套系书。但不管哪种形式,它们都解决了读者在学习某些方面遇到的问题,也给大家...

thch30 steps/make_mfcc.sh详解-程序员宅基地

文章浏览阅读809次。这个脚本的输入参数有三个:1.data/mfcc/train 2.exp/make_mfcc/train 3.mfcc/train1.data/mfcc/train中有数据预处理后的一些文件:phone.txt spk2utt text utt2spk wav.scp word.txt2.exp/make_mfcc/train中应该是要保存程序运行的日志文件的3.mfcc/train中是提取出的特征文件1是输入目录,2,3是输出目录#!/bin/bash# Copyright 2012-2_thch30

smartclient listgrid style (加竖线、横线、背景色)_listgrid添加样式-程序员宅基地

文章浏览阅读2.5k次。如图所示:在jsp中引入: Style.css 代码:.myOtherGridCell { font-family:Verdana,Bitstream Vera Sans,sans-serif; font-size:11px; color:black; border-bottom:1px solid #a0a0a0;border-right:1px solid_listgrid添加样式

学java一个周,写的第一个程序,实现武松打虎-程序员宅基地

文章浏览阅读554次。定义 人类 public class Person{ String name; double attack;...

推荐文章

热门文章

相关标签