![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 69
KeepLiang
windows客户端、Qt
展开
-
1.冒泡排序
冒泡排序(这里采用升序排序)是不断比较临近的两个元素大小,若出现两个元素为降序的(L[ i ]>L[ i+1 ]),则交换两者的值。把最最小值冒泡至前面(根据判断条件不同而不同),循环结束后,则是排序好的序列。 我写的程序是:每次都用前面的元素和后面的元素比较,若出现降序则交换。所以冒泡方式是,小的往前面移动。 例如: 23 54 33 65 一趟排序(用index[ 0 ]和...原创 2019-03-02 09:26:22 · 170 阅读 · 0 评论 -
10.栈stack与队列queue
栈(stack)是最常见的数据结构,其特性是“先进后出”。栈有进栈(push)和出栈(pop)两个操作,如同把一个个月饼装进(push过程)盒子,你若想拿到最下面的月饼,则需要把盒子上面的月饼一一取出(pop过程)。 栈的应用: 后缀表达式 操作符在操作数后面的表达式叫后缀表达式,中缀转化为后缀表达式后,利用出栈和入栈则可以计算出表达式的结果。 在这里不再分析,因为前面有博客写过。 队列...原创 2019-03-29 22:18:05 · 243 阅读 · 0 评论 -
6.归并排序
归并排序是归并两个有序的序列,这两个有序序列需要头尾两个指针,遍历这两个序列,按照排序规则保存在一个可以容纳这两个序列的序列中,当遍历结束,则新的序列为有序序列。 当我们需要对某一序列排序时,可以把该序列分成两半,分别对这两半进行排序,然后归并这两个有序序列。而这两半又可以递归地分半,类似二分法。 参考代码: #include<iostream> #include<std...原创 2019-03-17 21:20:49 · 134 阅读 · 0 评论 -
5.希尔排序
希尔排序是插入排序的改进,插入排序在序列基本有序时,非常的高效。插入排序是把序列的首个元素看做是有序的序列,然后把序列后面的元素往这个有序序列插入,其增量是1。而希尔排序则是取一定的增量的插入排序,其时间复杂度为nlogn。 例如: 5 4 3 2 1 第一趟取增量k=List.length/2,即对:5 3 1进行插入排序 排序后的序列为:...原创 2019-03-17 19:20:40 · 165 阅读 · 0 评论 -
9.基数排序
基数排序思想是对序列中的每个元素从个位到最大值的最高位进行比较,不足位数的用0补足,当排序结束后,可得有序序列。 和计数排序有些类似,计数排序是对序列中的元素进行计数,而基数排序则是对每位上的数进行记录(实则是在排序),并且这两个排序均是没有发生比较的情况下完成的排序~~~~尤其觉得基数排序神奇。 在基数排序中,我们需要10个代表0-9的数组,用来保存该位出现0-9中的元素,可以把这10个数组...原创 2019-03-20 21:47:17 · 177 阅读 · 0 评论 -
8.计数排序
计数排序需要建立一个表,这个表用来计数,统计每个数字出现的次数,这个表的长度为最大值和最小值的差+1,当最大值和最小值的差比较大时,建立的表也会非常大,非常消耗内存。建表结束后,再一次从表中取出数据,则可完成排序。 例如: 12 6 8 11 10 在上面的序列中,最大值为12,最小值为6,那么需要建立一个长度为7的表进行计数。 参考代码: #inclu...原创 2019-03-20 20:20:23 · 216 阅读 · 0 评论 -
7.堆排序
堆排序需要构建一个堆,这个堆近似完全二叉树。堆中的每个父节点均比两个子节点的值大,如果不符合这条规则的则需要对堆做出调整。而调整完毕后,则把堆顶元素出堆,再对剩下的堆元素进行调整,继续把堆顶出堆。直到全部出堆后,则可以得到排序好的序列。时间复杂度为nlog(n)。 需要注意的是:堆排序中的堆是一个近似的完全二叉树,也就是每层的节点都是填满的(最后一层除外),最后一个节点前均没有空节点。 堆结构...原创 2019-03-20 20:09:20 · 144 阅读 · 0 评论 -
4.插入排序
插入排序是把序列的第一个值当做是有序的序列,把余下的序列按照排序规则(升序还是降序)插入到该序列中,当遍历至序列尾部后,则形成有序序列。 例如: 6 5 4 3 2 把6当做是有序序列,把余下的序列(5,4,3,2)按照升序插入到有序序列(6)中。 第一趟结果:5 6 4 3 2 有序序列为(5,6) 第二趟结果:4...原创 2019-03-09 16:57:42 · 122 阅读 · 0 评论 -
3.选择排序
选择排序是每次从序列中找到最小值(最大值),放到序列的前面,待n-1次找到最小值后,则序列为有序的。 例如: 假定min=List[ 0 ],index=0,在遍历余下的元素和List[ 0 ]比较,如果比其小则记录当前元素的索引,不断向前更新index,遍历至序列末尾后则和List[ 0 ]交换 原序列: 22 56 23 17 68 第一趟:n=Lis...原创 2019-03-09 15:47:03 · 84 阅读 · 0 评论 -
2.快速排序
快速排序思想:每次找到一个标杆,在序列中的前面部分放置比标杆小的元素,在序列后面部分放置比标杆大的元素,那么标杆放置的位置则可以确认。待主循环结束,则是排序好的序列。 确认标杆位置: 在排序过程中,需要两个前后索引index[left],index[right]。index[left]向后前进,而index[right]往前回退。这两个索引需要找到不符合要求的元素(前面的元素比标杆大,后面的元...原创 2019-03-02 10:34:41 · 138 阅读 · 0 评论 -
11.链表
链表是由一个个结点(Node)连接而成的,结点分为数据域、指针域。指针域用于指向其后面的结点地址,而在链表尾部节点的指针域置为空(NULL),代表链表的结束。 通常节点的数据形式为: struct listNode { listNode *next; //指针域:指向后面节点的指针 dataType data; //数据域:保存数据 }; 和数组的区别: 1.遍...原创 2019-03-30 21:58:42 · 90 阅读 · 0 评论