![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
Ruixin1993
这个作者很懒,什么都没留下…
展开
-
选择排序
选择排序是一种简单直接的排序算法,基本原理: 对于给定的一组记录,经过第一轮比较后得到最小记录,然后将该记录与第一个记录位置进行交换。 然后对不包括第一个记录以外的其他记录进行第二轮比较,得到最小记录和第二个位置进行交换。 重复该过程,直到进行比较的记录只有一个时为止。 代码:public class InsertSort { public static void insert(int[]原创 2017-03-02 09:29:32 · 242 阅读 · 0 评论 -
插入排序
插入算法思想: 对于给定一组记录,初始时假设第一个记录自成一个有序序列,其余记录为无序序列。 接着从第二个记录开始,按照记录的大小依次将当前处理记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。 代码:public class InsertSort { public static void insert(int[] num){ if(num != null)原创 2017-03-02 09:34:47 · 288 阅读 · 0 评论 -
归并排序
归并排序是利用递归与分治技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再利用递归方法将排好序的半子表合并成为越来越大的有序序列。归并排序中,“归“代表的是递归的意思,即递归的将数组折半的分离为单个数组。“并”就是将分开的数据按照从小到大的或者从大到小的顺序放在一个数组里。算法原理: 对于给定的一组记录(假设n个),首先将每两个相邻的长度为1 的子序列进行归并,得到n/2(向上取整)个长原创 2017-03-02 11:27:44 · 313 阅读 · 0 评论 -
冒泡排序
冒泡排序就是把小的元素往前调或者把大的元素往后调,顾名思义就是整个过程就像气泡一样往上升,单向冒泡排序的思想是(假设由小到大排序):-对于给定n个记录,从第一个记录开始依次对相邻的两个记录进行对比,当前面的记录大于后面的记录时,交换位置。 - 进行完一轮比较和换位后,n个记录中最大的记录将位于第n位,然后对前面的n - 1 个记录进行第二轮比较 - 重复该过程直到进行比较的记录剩下一个为止。代码原创 2017-03-02 10:13:32 · 233 阅读 · 0 评论 -
快速排序
快速排序是一种非常高效的排序算法,它采取“分而治之”的思想,把大的拆分成小的,小的再拆分成更小的。原理: 对于给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中所有记录均有序为止。算法步骤: 分解:将输入的序列num[m…n]划分成两个非空子序列num[m…k]和num[k+1…n],使前原创 2017-03-03 11:26:11 · 304 阅读 · 0 评论 -
希尔排序
希尔排序: 希尔排序也被称为“缩小增量排序”。基本原理: 先将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序序列“基本有序”后,最后再对所有元素进行一次直接插入排序。具体步骤: 选择一个步长序列t1,t2,…,tk,满足ti>tj(i < j), tk = 1. 按步长序列个数k,对待排序序列进行k趟排序。 每趟排序,根据对应原创 2017-03-03 16:17:18 · 335 阅读 · 0 评论 -
堆排序
堆是一种特殊的树形数据结构,其每一个节点都有一个值,通常提到的堆都是完全二叉树,根节点的值小于(大于)两个子节点的值,同时,根节点的两个子树也分别是一个堆。堆排序思想: 初始时把这些记录看作一棵顺序存储的二叉树 然后将其调整为一个大顶堆 然后将堆的最后一个元素与堆定元素(二叉树的根节点)进行交换,则堆的最后一个元素是最大元素 接着将前n - 1 个元素(即不包括最大元素)重新调整为一个大顶堆,再将堆原创 2017-03-03 22:33:37 · 298 阅读 · 0 评论