摘要:
假设有一组无序序列 R0, R1, ... , RN 1。 (1) 我们先将这个序列中下标为 0 的元素视为元素个数为 1 的有序序列。 (2) 然后,我们要依次把 R1, R2, ... , RN 1 插入到这个有序序列中。所以,我们需要一个外部循环,从下标 1 扫描到 N 1 。 (3) 接下来 阅读全文
摘要:
前期概念: 二叉树 完全二叉树 左序遍历 中序遍历 右序遍历 堆 小根堆 大根堆 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节 阅读全文
摘要:
选择排序是一种很常见的排序算法,它需要对数组 中的元素进行多次遍历。每经过一次循环,选择最小的元素并把它放在靠近数组前端的位置。 代码实现: public static void selectionSort(int[] num) { for (int i = 0; i num[j]) { num[i 阅读全文
摘要:
冒泡排序算法的运作如下:(从后往前) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字 阅读全文
摘要:
快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列。步骤为: 从序列中挑出一个元素,作为"基准"(pivot). 把所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准的后面(相同的数可以到任一边),这个称为分区(partition)操作。 对每个分区递 阅读全文
摘要:
/ 归并排序:通常以递归的方式来实现,它反复将所处理的数组分成两半,并分别对这两半进行排序, 最后再把经过排序的数组归并在一起。 / 归并排序的伪代码实现: 将数组分为两半 对左半部分排序 对右半部分排序 合并左右两部分 合并算法的伪代码描述: i1 = 0; //左半部分的索引 i2 = 0;// 阅读全文