
数据结构与算法
NMG_CJS
公众号:曹李序员
知乎:空杯
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++实现单链表
概述 该单链表的实现具有迭代器(一个嵌套类)以及,增、删、改、查、反转操作,所有关于指针的操作均隐藏在迭代器里。 代码实现 template <class Object> class LinkList { private: struct Node { Object data; struct Node * next; Node(const Object & d = ...原创 2019-12-18 23:26:47 · 252 阅读 · 0 评论 -
归并排序(C语言)
简介 归并排序简言之就是合并两个有序表 对于一个初始状态为无序的序列,我们先将其分割成左右子序列,然后对这两个左右子序列递归应用归并排序,最后依次合并各个有序子序列 那么如何分割呢?简单,2等分即可 那么如何合并这两个有序表呢? 假设有两个有序数组A、B,输出数组C,以及指向这三个数组的索引i、j、k,这三个索引初始值均为数组首元素位置,然后将A、B中较小的那个元素移动到C,更新较小者数组和C数组...原创 2019-11-04 21:10:08 · 549 阅读 · 0 评论 -
快速排序(C语言)
简介 快速排序与归并排序一样也是一种分治递归算法,其排序(升序)步骤可以简述如下: 1、在待排元素集合N中任选一元素做为枢纽元 2、开始分割元素,使左部元素均小于枢纽元,右部元素均大于枢纽元 3、对左右子序列递归应用步骤1、2 1、选取枢纽元 有一种极其常见的、错误的、非常糟糕的枢纽元的选取,是选取数组第一个或者最后一个元素为枢纽元,如果输入序列是随机的那么上述做法可以接受,但如果输入的序列与我们...原创 2019-11-02 22:45:57 · 417 阅读 · 0 评论 -
冒泡排序(C语言)
算法原理 以升序为例: 从数组起始位置逐次比较相邻的元素。 如果前一个元素比后一个元素大,则交换这两个元素,从前往后逐次遍历,那么最后一个元素则是最大的数。 重复步骤1、2除了已经移至最后的元素 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 ...原创 2018-10-14 15:17:12 · 284 阅读 · 0 评论 -
选择排序(C语言)
算法原理 以升序为例: 选取数组第0个位置为最小的元素的位置,将该位置元素依次和数组剩余元素做比较,将最小者放入位置0; 重复步骤1,依次填充数组第1、第2个元素…直到最后一个元素为止。 以下为代码实现: #include <stdio.h> #include <stdlib.h> #include <assert.h> #define ARRAYSIZE...原创 2018-10-14 15:43:32 · 360 阅读 · 0 评论 -
插入排序&&希尔排序(C语言)
算法原理 以升序为例: 假设前N个元素已经按升序方式排好序了,那么先让第N+1个元素和第N个元素进行比较,如果该元素小于第N个元素,那么将第N个元素放入第N+1个位置,将第N+1个元素插入前N个位置中合适的位置。 以下为代码实现: #include <stdio.h> #include <stdlib.h> #include <assert.h> #defin...原创 2018-10-14 16:31:39 · 266 阅读 · 0 评论