学习日记:排序

目录

1.选择排序

2.冒泡排序

3.插入排序

4.查找

4.1 二分查找


1.选择排序

思想:给合适的位置选择合适的数(用后面的数依次跟指定位置上的数比较,如果后面的书比指定位置的数小,就交换两个数,依次重复,一直到下标的倒数第二个)

图解:

step1:在初始的元素中找到最小值放到第一个位置

step2:在剩余数中找出最小值放到第二个位置

如此依次找出最小值。直到剩最后两个数,再比较其大小。

代码实现思路:

(1)有len个数,len个数需要交换len-1轮,且数组下标从0开始,那么最外层循环是 i 的

取值是 [0,len-1),

(2)定义 j 变量,表示当前最小数的下标,每轮循环时,默认假设初始值是最小值,即初始赋值 j = i+1

(3)遍历除当前最小数以外剩余的数,如果发现有比当前最小数更小的数,则记录更小的数的下标,然后两数交换

#include<stdio.h>int main(void)
{int a[] = {4,1,3,5,7,0,9,2,6,8};int len = sizeof(a)/sizeof(a[0]);int i = 0;int j = 0;for(i = 0;i < len-1;++i)        // 控制位置,i表示下标,给i号位置找数,当找到了前面len-1                            个数,最后一个数就确定了{for(j = i+1;j<len;++j)      // 表示给i号位置找合适的数,要和后面所有的数都比较{if(a[j]<a[i])           // a[i]表示要找合适数的那个位置的原先的值, 依次用j号位置 的值去和i号位置的值进行比较{int temp = a[i];    // 引入一个中间值a[i] = a[j];        // 交换a[i]和a[j]a[j] = temp;}}}for(i = 0;i < len;++i){printf("%d ",a[i]);}putchar('\n');return 0;
}

2.冒泡排序

思想:一次冒一个数,相邻两个元素两两比较,小的放前,大的放后。(0和1上的位置的值比较,1和2位置上的值比较,依次比较,每次找出来的是最大数--- 升序) 

如果要将已知8个无序数列按从小到大排列,首先用第一个数和第二个数比较,如果后一个数比前一个数小,则交换位置,依次下去,进行7次比较,第一趟得出这组数的最大值,放在了数组最后一个位置,在我们后面的比较的时候,就不用再与其比较了,所以第二趟我们就进行6次比较,得出这组数的次大值,放在了下标为6的位置,如此循环进行循环7趟,就得到了我们由小到大的排序了。

#include<stdio.h>int main(void)
{int a[] = {4,1,7,0,3,2,5,8,6,9};int len = sizeof(a)/sizeof(a[0]);int i = 0;int j = 0;for (i = 1;i<len;++i)               // 控制趟数{for(j = 0;j<len-i;++j)          //一趟的比较过程{if(a[j]>a[j+1]){int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}for(i = 0;i < len;++i){printf("%d ",a[i]);}putchar('\n');return 0;
}

3.插入排序

 思想:首先把第一个位置上的数假设为最小数,用a[1]位置上的数与他比较,如果a[1]上的数比它小,则将a[0]的值赋给a[1]将a[1]的值放在a[0]的位置,再用a[2]与a[1]比较,如果·a[2]比它小则交换两个数,再把它与a[0]上的数比较,如此循环,直到最后两个数比较完。

#include<stdio.h>int main(void)
{int a[] = {3,2,5,4,1,8,6,9,7};int len = sizeof(a)/sizeof(a[0]);int i = 0;int j = 0;for(i = 1;i < len;++i)            {int t = a[i];                // 拿数,记录此时 i 位置上的值j = i;                       // 准备要放的位置while(j>0 && t<a[j-1])       // 将 i 位置上的值依次与前面的数进行比较,直到有一个数比t        小或者到了a[0]的位置{a[j] = a[j-1];           // 挪位置--j;}a[j] = t;}for(i = 0;i<len;++i){printf("%d ",a[i]);}putchar('\n');return 0;
}

4.查找

4.1 二分查找

前提:数据得是有序的。

思想:先找到中间位置的数,用这个数和要找的数比较。(每次折一半,直到找到对应数组,或者结束),如果输入的数比中间数小,则输入数在数组的前一半,缩小范围,如果输入的数比中间数大,则表示输入数在数组的后一半,缩小范围继续查找。

#include<stdio.h>int main(void)
{int a[] = {1,2,3,4,5,6,7,8,9};int len = sizeof(a)/sizeof(a[0]);int begin = 0;int end = len-1;int n;printf("Input a num:");scanf("%d",&n);while(begin <= end)                {int mid = (begin+end)/2;if(n>a[mid]){begin = mid + 1;            // 要查找的数比中间的数大,说明要找的数在后面一半,缩 小区间}else if(n<a[mid]){end = mid - 1;              // 要查找的数比中间的数小,说明要找的数在前面面一半, 缩小区间}else                           // 要找的数和中间值相等,表示找到了{break;}}if(begin <= end)                    // 如果成立表示是从前面break出来的{printf("找到了!\n");}else{printf("没有这个数!\n");}return 0;
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280084.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

API 接口自动化测试的基本原理及实战教程

常用API接口协议介绍 HTTP协议 超文本传输协议 它是用来在Internet上传送超文本的传送协议&#xff0c;运行在TCP/IP协议族之上&#xff0c;它可以使浏览器更加高效&#xff0c;使网络传输减少。 任何服务器除了包括HTML文件以外&#xff0c;还有一个HTTP驻留程序&#xf…

(day28)leecode——有效括号

描述 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()(())","…

【Unity动画】Animation Sequencer:动画制作的革新工具

在Unity游戏开发中&#xff0c;动画是提升玩家体验的关键因素。传统的动画制作方式往往耗时且复杂&#xff0c;但有了Animation Sequencer&#xff0c;这一过程将变得更加直观和高效。本文将介绍Animation Sequencer这一视觉工具&#xff0c;探讨其如何帮助开发者在Unity编辑器…

案例分享-国外轻松感UI设计赏析

国外UI设计倾向于采用简洁的布局、清晰的排版和直观的交互方式&#xff0c;减少用户的认知负担&#xff0c;从而营造出轻松的使用体验。这种设计风格让用户能够快速找到所需信息&#xff0c;降低操作难度&#xff0c;提升整体满意度。 在注重美观的同时&#xff0c;更加重视用户…

技术详解:互联网医院系统源码与医保购药APP的整合开发策略

本篇文章&#xff0c;小编将从系统架构、数据安全、用户体验和技术实现等方面详细探讨互联网医院系统与医保购药APP的整合开发策略。 一、系统架构 1.模块化设计 互联网医院系统与医保购药APP的整合需要采用模块化设计。 2.微服务架构 每个功能模块作为一个独立的微服务&am…

成为git砖家(9): git checkout <commit> <file> 的含义

文章目录 1. 目的2. 官方文档解释3. Tower 的解释4. References 1. 目的 git checkout 命令承载了非常多的功能&#xff0c; 想要一次全弄懂&#xff0c;不太现实&#xff1b; 这次白鱼带领大家学习 git checkout <file> 的用法。 老规矩&#xff0c;先查看 git checko…

DRAM的可靠性受什么因素影响

挑战 随着IC尺寸的不断减小&#xff0c;它们变得更容易受到多种环境因素的损害&#xff0c;尤其是对于放置在高温或低温且空气中含有微粒的恶劣环境中的系统。在远程维护受限的室外偏远地区设置的系统特别容易受到攻击。 IC质量不均。晶圆内的IC可能不一定具有相同的质量。一个…

PSINS工具箱函数介绍——kfinit0

【注】本文所述的函数kfinit0不同于kfinit&#xff0c;后者的讲解链接见&#xff1a;PSINS工具箱函数介绍——kfinit kfinit是kf的参数初始化函数&#xff0c;用于初始化滤波参数 本文所述的代码需要基于PSINS工具箱&#xff0c;工具箱的讲解&#xff1a; PSINS初学指导&…

金额转换题目

import java.util.Scanner;/*** author gyf* ClassName Test* Date 2024/7/30 17:51* Version V1.0* Description : 金额转换*/ public class Test {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int money;// 输入验证while (true) {Sys…

进程间通信与线程间通信的方法汇总

目录 一、进程间通信机制 管道(pipe)&#xff1a; 命名管道(FIFO)&#xff1a; 消息队列(MQ)&#xff1a; 信号量(semaphore)&#xff1a; 共享内存(shared memory)&#xff1a; 信号(signal)&#xff1a; 内存映射(mapped memory)&#xff1a; 内存映射和共享内存的区…

【论文共读】【翻译】【GAN】Generative Adversarial Nets

论文原文地址&#xff1a;https://arxiv.org/pdf/1406.2661 翻译&#xff1a;Generative Adversarial Nets 生成对抗网络 0. 摘要 提出了一种新的对抗过程估计生成模型的框架&#xff0c;其中我们同时训练两个模型&#xff1a;一个是捕获数据分布的生成模型G&#xff0c;另一…

RCE和php文件上传

一、远程命令执行&#xff08;RCE&#xff09; RCE漏洞概述 RCE漏洞允许攻击者通过某种方式在目标服务器上执行任意命令。这种漏洞通常出现在服务器端语言中&#xff0c;如PHP。 RCE漏洞原理 PHP中的一些函数可以执行命令或代码&#xff0c;但如果对这些函数的输入未加限制&a…

Docker容器下面home assistant忘记账号密码怎么重置?

环境&#xff1a; docker ha 问题描述&#xff1a; Docker容器下面home assistant忘记账号密码怎么重置&#xff1f; 解决方案&#xff1a; 你可以按照以下步骤来找回或重置密码&#xff1a; 方法一 (未解决) 停止并删除当前的Home Assistant容器&#xff08;确保你已经保…

【Python工具】Python 实现 telnet、loguru 框架下的 DEBUG 分级日志打印

文章目录 1、背景2、轮子2.1、telnet2.2、loguru DEBUG 日志分级 1、背景 最近业务这边需要用 Python 起一个 web 服务器&#xff0c;做 LLM 相关的业务处理。后台选用的是 django 框架做 web 框架&#xff0c;现在也算结项了。初次写 Python&#xff0c;造出来的轮子啥的总结…

Redis学习[3] ——持久化

四. Redis 持久化 4.1 Redis 如何保证数据不丢失&#xff1f; 由于Redis的数据是保存在内存中&#xff0c;而内存中的数据会在Redis重启后丢失。因此&#xff0c;为了保证数据不丢失&#xff0c;Redis实现了数据持久化的机制。这个机制会将内存中的数据存储到磁盘&#xff0c…

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列&#xff0c;感兴趣的朋友可以添加关注&#xff0c;欢迎指正、交流。 争取每个知识点能够多总结一些&#xff0c;至少要做到在面试时&#xff0c;针对每个知识点都可以侃起来&#xff0c;不至于哑火。 JavaScript 之你不一定会的基础题 前言 面试往…

[LLM]一文学会如何构建属于私有Code Pilot

本文将使用基于Llama.cpp的插件Tabby构建个人Code Pilot助手。 首先我们看一下编码的大模型榜单&#xff0c;在抱抱脸上bigcode上可以参考。 给VSCode插上翅膀 榜单上排名第一的是OpenCodeInterpreter-DS-33B&#xff0c;看起来很强大但是显然 MAC M1 是跑不了。虽然 MAC M1可…

使用人工智能在乳腺癌筛查中的早期影响指标| 文献速递-AI辅助的放射影像疾病诊断

Title 题目 Early Indicators of the Impact of Using AI in Mammography Screening for Breast Cancer 使用人工智能在乳腺癌筛查中的早期影响指标 01 文献速递介绍 基于人群的乳腺癌筛查通过使用乳房X线摄影成功地降低了乳腺癌的死亡率&#xff0c;但这给乳腺放射科医生…

react中路由懒加载

// 1.引入方法&#xff0c;用于创建路由实例 // createBrowserRouter是用于创建history模式 // createHashRouter是用于创建hash模式 // 路由模式的切换只需要更改创建路由实例的方法就行了&#xff0c;其他地方不需要更改 import { createBrowserRouter,createHashRouter } fr…