PAT【甲级】的相关要求:

     在达到乙级要求的基础上,还要求:

  1. 具有充分的英文阅读理解能力;
  2. 理解并掌握基础数据结构,包括:线性表、树、图;
  3. 理解并熟练编程实现经典高级算法,包括哈希映射、并查集、最短路径、拓扑排序、关键路径、贪心、深度优先搜索、广度优先搜索、回溯剪枝等;
  4. 具备较强的问题抽象和建模能力,能实现对复杂实际问题的模拟求解。

所以需要掌握等能力也包括:线性表、树、图、哈希映射、并查集、最短路径、拓扑排序、关键路径、贪心、深度优先搜索、广度优先搜索、回溯剪枝等十几种算法能力。在PAT【乙级】中最难到排序算法,所以先从排序算法开始学习。

1.1 冒泡排序

算法步骤:

  1. 比较两个相邻的元素,如果第一个元素比第二个元素大,那么交换两个元素;
  2. 对每一对相邻的元素做同样的工作,从开始第一对到结尾最后一对,这步做完后,最后的元素会是最大的数;
  3. 针对所有元素重复以上步骤,除了最后一个数;
  4. 持续每次对越来越少的元素重复上述步骤,直到没有任何一对数字需要比较。

代码实现:

void BubbleSort(int arr[],int n){for(int i=0;i<n;i++){           //排序的趟数,也可以n-1for(int j=0;j<n-1-i;j++){  //元素比较次数if(arr[j]>arr[j+1]){  //如果前一个元素比后一个元素大,交换两个元素int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}
}

1.2 选择排序

算法步骤:

  1. 首先在未排序序列中,找到最小(大)的元素,存放到排序序列的起始位;
  2. 再从剩余的排序序列中继续寻找最小(大)的元素,存放到已排序序列的末尾;
  3. 重复第2步,直到所有的元素均排序完毕。

代码实现:

void SelectSort(int arr[],int n){for(int i=0;i<n-1;i++){int min=i; //记录最小元素的下标for(int j=i+1;j<n;j++){if(arr[j]<arr[min]){min=j;    //把最小值的下标赋值给找到的更小的值的下标}}int temp=arr[i];arr[i]=arr[min];arr[min]=temp;}
}

1.3 插入排序

算法步骤:

  1. 将待排序序列的第一个元素看作第一个有序序列,把第二个元素到最后一个元素看做未排序序列;
  2. 从头到尾扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置,如果插入的元素与有序序列找那个的每个元素相等,则将待插入元素插入到相等元素的后面。

代码实现:

void InsertSort(int arr[],int n){for(int i=1;i<n;i++){  //n-1排序int temp=arr[i],j=i;while(j>0&&temp<arr[j-1]){arr[j]=arr[j-1];j--;}arr[j]=temp;}
}

【排序】几种简单的排序(冒泡、选择、插入)(一)相关推荐

  1. php冒泡 插入选择 排序,说说PHP数组的三种排序(冒泡/选择/插入)方法

    说说PHP数组的三种排序(冒泡/选择/插入)方法 PHP #数组 #排序 #冒泡 #选择 #插入2012-05-30 10:17 一.冒泡排序法 说明:找到最大的数,排列到最后面,然后继续找 例: $ ...

  2. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  3. 八大排序(一):四种简单的排序(直接插入排序、希尔排序、冒泡排序、选择排序)

    源码地址: https://github.com/TimePickerWang/aimed-at-offer/blob/master/java%E6%BA%90%E7%A0%81/Sort.java ...

  4. C#开发技术点说明-四种简单的排序算法,AJAX,Http Module,Http 请求处理流

    我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF.Asp.Net MVC.AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.Net.WinForm.还应该有着牢固的计 ...

  5. 【Leetcode】几种简单的排序算法

    冒泡排序 冒泡排序(Bubble Sort) 最为简单的一种排序,通过重复走完数组的所有元素,通过打擂台的方式两个两个比较,直到没有数可以交换的时候结束这个数,再到下个数,直到整个数组排好顺序.因一个 ...

  6. C语言、Java学习笔记(三)---几种简单的排序算法

    假期已经过了一半,整个人都变得颓废了许多.今天没有出去玩,就学了几个简单的排序算法,以求安慰自己,好歹也是在假期里学习过了.(瘫- C 这里一次性给出三种排序方法的代码,分别是冒泡排序,选择排序和归并 ...

  7. 输入三个字符串,按由小到大的顺序输出 字符串排序-一种简单的方法

    1 /** 2 * 对两位数的ascii是可以的 3 * 对三位数的就不行了 4 */ 5 import java.util.Scanner; 6 public class 字符串排序 { 7 8 p ...

  8. html表格按照编号排序,JS实现简单表格排序操作示例

    本文实例讲述了JS实现简单表格排序操作.分享给大家供大家参考,具体如下: sort table *{ margin:0px; padding:0px; } body{ background:#ccc; ...

  9. 算法笔记-排序算法(冒泡 选择 插入)

    首先罗列一下常见的十大排序算法: 一.冒泡排序 1. 定义: 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则 ...

最新文章

  1. MySQL xtrabackup之--databases 勿手贱
  2. ExtJs 3.1 XmlTreeLoader Example Error
  3. python参考文献_[zotero/python]库中参考文献条目删除后,清除残留PDF的脚本
  4. springbatch开启任务的两种方式
  5. JDBC--使用配置文件动态创建数据库
  6. 2021年中国电子药片胶囊计数机市场趋势报告、技术动态创新及2027年市场预测
  7. 官网消息【iPlayer外挂字幕】功能开发中!有图
  8. “第八期央企CIO论坛”成功举办
  9. c++ssh连接_多台WIN10之间的SSH免密登录
  10. 在c语言程序中整型常量不能表示的数制是,C源程序中不能表示的数制有哪些
  11. php mysql知识总结_Mysql数据库知识总结(看资料总结出来的)
  12. Python + folium 制作美美的地图~
  13. 给定经纬度计算距离_oracle 根据经纬度计算任意两地之间的距离
  14. 7.scala初识 柯里化、隐式参数、隐式转换、视图边界、上界、下界、协变、逆变
  15. “一路向南,dream it possible”之旅--骑行从北京到成都(一)
  16. 专升本英语 学习笔记
  17. CRC校验查表法原理及实现(CRC-16)
  18. NISP|CISP培训都需要学习什么内容?
  19. 计算机教师教育教学特长,计算机教师教学计划
  20. MyBatis学习(1)

热门文章

  1. 提高SQL语句的性能
  2. php中cookie的用法
  3. 无法添加选择的Web部件
  4. 为什么linux的TTY登录程序getty/agetty一般都会设置一个-L的option?
  5. NER数据增强、badcase处理、数据优化
  6. node + express + mongodb 手动配置
  7. 【Flask】ORM高级操作之分组、过滤和子查询
  8. 用户层CS段描述符信息
  9. php 函数分类,PHP Array 函数
  10. java 合并流_使用流执行聚合