
排序算法笔记
醉风o
这个作者很懒,什么都没留下…
展开
-
快速排序
目录一 基本思想二 例子三 复杂度分析 一 基本思想 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 二 例子 class QuickSort { public static void Sort(int[] array) { QSort(array, 0, array.Length - 1); }原创 2020-07-03 23:38:35 · 208 阅读 · 1 评论 -
归并排序
目录一 基本思想二 例子三 复杂度分析 一 基本思想 1.假设初始序列含有 n 个记录, 则可以看成是 n 个有序的子序列, 每个子序列的长度为1, 然后两两归并,得到[ n / 2] ([x] 表示不少于 x 的 最小整数)个长度为2 或 1 的有序子序列,;再两两归并,······,如此重复, 直至得到一个长度为 n 的有序序列为止, 这种排序方法称为2路归并排序。 二 例子 public static void Sort(int[] array, int startIndex, int end原创 2020-07-03 18:50:18 · 127 阅读 · 0 评论 -
堆排序
目录一 基本思想1.1 什么是堆1.2 堆排序二 例子三 时间复杂度 一 基本思想 1.1 什么是堆 堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆; 或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 堆的根结点一定是堆中的最大(小)者。 1.2 堆排序 将排序的序列构成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点。将它移走(其实就是将其与堆数组的末尾元素交换),然后间剩余的 n - 1 个序列重新构成一个堆, 这样就会得到 n 个元素的次小值。原创 2020-07-02 23:34:18 · 83 阅读 · 0 评论 -
希尔排序
目录一 基本思想二 例子三 时间复杂度 一 基本思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,再对全体记录做一次插入排序。 二 例子 private void ShellSort(int[] array) { int length = array.Length; for (int gap原创 2020-07-01 21:57:43 · 94 阅读 · 0 评论 -
直接插入排序
目录一 基本思想二 例子三 时间复杂度 一 基本思想 直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加 1 的有序表。 二 例子 private int[] array = new int[10] {4,5,6,3,2,1,7,8,9,0}; private void InsertSort() { for (int i = 1; i < array.Length; i++) {原创 2020-07-01 18:15:02 · 105 阅读 · 0 评论 -
简单选择排序
目录一 基本思想二 例子三 时间复杂度 一 基本思想 简单选择排序就是通过 n-i-1 次关键字间的比较, 从 n-i 个记录中选出关键字最小的记录, 并和第 i 个记录交换。 二 例子 private int[] array = new int[10] {4,5,6,3,2,1,7,8,9,0}; private void SelectSort() { int min = 0; for (int i = 0; i <原创 2020-07-01 16:51:04 · 246 阅读 · 0 评论 -
冒泡排序
一 基本思想 两两比较相邻的元素, 如果反序则交换, 知道没有反序的元素为止。原创 2020-07-01 15:58:04 · 81 阅读 · 0 评论