今天继续软考的学习
今天学复习了几个排序的基本概念。还有软件工程的软件过程模型和敏捷方法。
除此之外在昨天发现一个微信小程序:软考达人 。里面有历年真题联系,章节练习,知识点学习等很多功能,是个免费的程序,我用起来非常不错,刷了很多题(不过都是简单的,难的题做不出来),之后尝试做一些难题
八大排序
5 8 1 4 7 3 2 6
一.直接插入排序
直接插入排序是从第二个数据开始遍历,与前面的数据进行比较如果小于 则让前面的数据向前移动 自己接着向前面的数据比较 直到比较到大于等于自己的数据或者没有数据能进行比较时停止 插入当前的位置。
二.希尔排序
希尔排序又称缩小增量排序,它选定了一个整数gap将待排数据分组,然后对组内的数据进行直接插入排序,接着减小gap 改变分组的区间 再进行排序。此过程称为预排序。最后gap减小到1时,数据已经接近有序,再对数据进行直接插入的排序效率则较高。
三.选择排序
选择排序在八大排序中属于是最“老实的”一个排序,其基本思想 首先选出一个关键值 一般是数据的第一位 接着遍历剩下的数据 记录剩下数据中最小值和最大值的下标。接着将最小值放到左边,最大值放到右边 接着减小需要排序的区间(因为已经排一个最大值和一个最小值了)
四.堆排序
堆排序基于完全二叉树的数据结构,将待排序列构建成一个大顶堆(或小顶堆)。此时,堆顶元素是最大(或最小)值。将其与末尾元素交换,然后调整剩余元素为新堆,重复此过程直到所有元素有序。
基本思想:
- 将无序序列构建成堆
- 将堆顶元素与末尾元素交换,最大元素沉到数组末端
- 重新调整结构使其满足堆定义,继续交换堆顶与当前末尾元素
- 重复执行直到整个序列有序
五.冒泡排序
冒泡排序通过重复遍历待排序序列,比较相邻元素并交换位置错误的元素,使较大(或较小)元素逐渐"浮"到顶端。
基本思想:
- 比较相邻元素,如果顺序错误就交换
- 对每一对相邻元素做同样工作,从开始到结尾,此时最后元素是最大(最小)值
- 针对所有元素重复上述步骤,除了最后已排序元素
- 重复直到没有元素需要交换
六.快速排序
快速排序采用分治策略,通过一趟排序将数据分割成独立的两部分,其中一部分的所有数据都比另一部分小,然后递归地对这两部分进行排序。
基本思想:
- 从数列中挑出一个元素作为基准
- 重新排列数列,所有比基准小的放在前面,比基准大的放在后面
- 递归地对两个子序列进行快速排序
七.归并排序
归并排序采用分治法,将已有序的子序列合并,得到完全有序的序列。先使每个子序列有序,再使子序列段间有序。
基本思想:
- 将序列分成两半,分别进行归并排序
- 将两个有序表合并成一个有序表
- 重复分解和合并过程直到整个序列有序
八.计数排序
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。
基本思想:
- 找出待排序数组中最大和最小元素
- 统计每个值为i的元素出现的次数,存入计数数组的第i项
- 对所有的计数累加(从计数数组的第一个元素开始,每一项和前一项相加)
- 反向填充目标数组,将每个元素i放在新数组的第C[i]项,每放一个元素就将C[i]减去1