数据结构和算法
素炒瓢儿白
道可道,非恒道;名可名,非恒名。无名,天地之始;有名,万物之母。
展开
-
C语言递归实现归并排序
思想 将两个有序的队列合并成一个大的有序的序列,反复操作,直到合并成一个有序的队列。 思路 一个大的无序队列,采用分治法进行排序。先将无序队列一分为二再一分为二,层层递归到只有两个数时,进行排序,然后再依次返回,在返回的时候,再次对两个有序子序列进行合并,然后层层递归合并,到最后只有一个有序的队列完毕。 此处盗图二张: 图片来源: 图解排序算法(四)之归并排序 实现 ...原创 2018-04-07 16:24:21 · 1738 阅读 · 2 评论 -
C语言冒泡排序三种写法
#include <stdio.h> /* @function: bubble_sort_one @functional: bubble sort @order for parameter value, 1 is ascending and 0 is descending */ static int bubble_sort_one(int order) { int ar...原创 2018-04-02 23:41:32 · 8503 阅读 · 1 评论 -
C 语言直接选择排序代码
选择排序中心思想: 每次从无序的队列中,选择出最大(最小)的值,排到有序队列的队尾,并将该值从无序队列中移除。 实现时,在不考虑空间的情况下,可以申请和无序队列一样大小的空间并初始化,然后按照上述的思想将无序队列中的值一个接一个放到该空间上形成有序队列。这种操作是可以实现直接选择排序,但是在内存空间的考量上是不合适的。为了节约内存空间,可以先在无序队列中找到最大(最小)值的下标,然后将这个下标...原创 2018-04-05 17:08:45 · 395 阅读 · 0 评论 -
求任意一个正整数的二进制中有多少个比特位为1
思路 一个正整数的二进制中有多少个比特位为1,最直接可想到的是,将该正整数化为二进制的形式,挨个数出其中有多少个1即可。C语言中,和比特位相关的内容,即是位操作。此处可以将该正整数与 0x01 进行位与,即可得知该数的二进制最低位是否为1,然后将该数向右移动一位,再次判断移动后的最低位是否为1,依次操作,直到该数右移变成0. 代码实现 #include <stdio.h> ...原创 2018-04-05 23:08:25 · 1708 阅读 · 0 评论 -
C语言字符反转
题目 给定一个字符串,然后将该字符串逆序反转。 思路 设置两个游标 i 和 j,一个(假设为 i)在字符串的最开始,一个(假设为 j)在字符串的倒数第二位置(倒数第一位置为 ‘\0’ ,不能动它),i 和 j 位置的值互相交换后,i 加一个位置,j 减一个位置,两个位置上的值再次进行交换。重复上面的操作,直到 j 不大于 i。 使用栈的方法,根据栈的特点,先进后出,push 一次栈然后...原创 2018-04-06 23:06:08 · 1718 阅读 · 1 评论 -
C 语言直接插入排序
思路 首先将无序队列的第一个元素,看作已经排好序。然后拿无序队列的第二个元素与第一个元素进行比较,(此处考虑升序排列的情况下),如果第二个元素小于第一个元素,则将第二个元素插入到第一个元素的左边。然后循环进行,直到无序队列的最后一个元素比较完成。因为涉及到数据位置的移动、交换,需要一个中间变量。 实现 /* @function: insert_sort @functional: in...原创 2018-04-07 10:48:48 · 165 阅读 · 0 评论 -
C语言快速排序
原理 任选无序队列中的一个元素作为参考元素,将无序队列中大于参考元素的值都放到参考元素的右边,将无序队列中小于参考元素的值都放在参考元素左边。然后再对该参考元素的左右两边,再次进行参考值的选择,并重复上面的动作,直到完成排序。一般的,第一个参考元素,会选择无序队列的首元素作为参考元素。 思路 可以设定两个哨兵变量 left 和 right,left 从队列的最左边开始扫描,扫描大于参考值的元...原创 2018-04-07 13:46:20 · 1176 阅读 · 0 评论 -
C语言链表的基本操作:增、删、遍历、翻转
内容 实现了单链表的基本操作,包括:节点的创建、添加、插入、删除、遍历、翻转。 代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <time.h> typedef unsigned long Da...原创 2018-04-19 10:16:36 · 819 阅读 · 0 评论