数据结构与算法
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 · 227 阅读 · 0 评论 -
归并排序(C语言)
简介归并排序简言之就是合并两个有序表对于一个初始状态为无序的序列,我们先将其分割成左右子序列,然后对这两个左右子序列递归应用归并排序,最后依次合并各个有序子序列那么如何分割呢?简单,2等分即可那么如何合并这两个有序表呢?假设有两个有序数组A、B,输出数组C,以及指向这三个数组的索引i、j、k,这三个索引初始值均为数组首元素位置,然后将A、B中较小的那个元素移动到C,更新较小者数组和C数组...原创 2019-11-04 21:10:08 · 516 阅读 · 0 评论 -
快速排序(C语言)
简介快速排序与归并排序一样也是一种分治递归算法,其排序(升序)步骤可以简述如下:1、在待排元素集合N中任选一元素做为枢纽元2、开始分割元素,使左部元素均小于枢纽元,右部元素均大于枢纽元3、对左右子序列递归应用步骤1、21、选取枢纽元有一种极其常见的、错误的、非常糟糕的枢纽元的选取,是选取数组第一个或者最后一个元素为枢纽元,如果输入序列是随机的那么上述做法可以接受,但如果输入的序列与我们...原创 2019-11-02 22:45:57 · 396 阅读 · 0 评论 -
冒泡排序(C语言)
算法原理以升序为例:从数组起始位置逐次比较相邻的元素。如果前一个元素比后一个元素大,则交换这两个元素,从前往后逐次遍历,那么最后一个元素则是最大的数。重复步骤1、2除了已经移至最后的元素持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较...原创 2018-10-14 15:17:12 · 267 阅读 · 0 评论 -
选择排序(C语言)
算法原理以升序为例:选取数组第0个位置为最小的元素的位置,将该位置元素依次和数组剩余元素做比较,将最小者放入位置0;重复步骤1,依次填充数组第1、第2个元素…直到最后一个元素为止。以下为代码实现:#include <stdio.h>#include <stdlib.h>#include <assert.h>#define ARRAYSIZE...原创 2018-10-14 15:43:32 · 331 阅读 · 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 · 244 阅读 · 0 评论