![](https://img-blog.csdnimg.cn/20200503002531938.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
常见的算法
Mk_kkkk
我希望沐浴阳光,永无休止的漫步、憩息、旅游、冒险,最后浪迹天涯。
展开
-
最常用的排序-快速排序
快速排序应用交换排序基本思想的主要排序方法有:冒泡排序(Bubble sort)和快速排序(Quick sort)。快速排序是对冒泡排序的一种改进,基本思想:通过一趟排序将待排记录分割为独立的两部分,其中一部分记录关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,已达到整个有序。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个 10 个数进行排序。首先在这个序...原创 2020-05-04 18:25:56 · 213 阅读 · 0 评论 -
邻居好说话-冒泡排序
冒泡排序基本思想交换排序的基本思想是:两两比较待排序记录的关键字,若反序即进行交换,直到没有反序的记录为止。冒泡排序的基本思想是:每次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。每次都是比较相邻的两个数,如果后面的数比前面的数大,则交换这两个数的位置。一直比较下去直到最后两个数比较完毕后,最小的数就在最后一个了。就如同是一个气泡,一步 一步往后“翻滚”,直到最后一位。每将一个...原创 2020-05-04 01:18:15 · 152 阅读 · 0 评论 -
最快最简单的排序-桶排序
桶排序期末考试完了老师要将同学们的分数按照从高到低排序。满分10分,班上有5个同学,这5个同学分别考了5分、3分、5分、2分和8分。接下来将分数进行从大到小排序,排序后是8 5 5 3 2。我们这里只需借助一个一维数组就可以解决这个问题。首先我们需要申请一个大小为11的数组int a[11]。编号从a[0]a[10]。刚开始的时候,我们将a[0]a[10]都初始化为0,表示这些分数还都没有人...原创 2020-05-04 01:17:34 · 573 阅读 · 0 评论 -
最长公共子序列(动态规划)
最长公共子序列最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套路,比如说编辑距离。而且,这个算法稍加改造就可以用于解决其他问题,所以说 LCS 算法是值得掌握的。题目就是让我们求两个字符串的 LCS 长度:输入: s1 = "babcde", s2 = ...原创 2020-05-04 00:20:12 · 1481 阅读 · 0 评论 -
青蛙跳台阶(动态规划)
青蛙跳台阶普通青蛙跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路这个题采用动态规划的思想,它每次只能跳一阶或者两阶台阶;那么它跳到第n阶台阶就有两种情况,从第n-1阶台阶一次跳一阶;或者从n-2阶台阶一次跳两阶;那么依次类推,只要保留跳到n-1和n-2的情况就可以算出跳到n的次数;类似于斐波那契数列。编码...原创 2020-05-02 23:54:26 · 728 阅读 · 0 评论 -
堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。要将初始数组调整为一个大根堆,就必须将它所对应的完全二叉树中以每一结点为根的子树都调整为堆。显然只有一个结点的树是堆,而在完全二叉树中,所有序号大于n/2的结点都是叶子,因此以叶子结点为根的子树均已是堆原创 2017-04-17 15:06:54 · 398 阅读 · 0 评论 -
几种排序总结(一)
交换排序的基本思想是:两两比较待排序记录的关键字,若反序即进行交换,直到没有反序的记录为止。static void swap(int *p,int *s ){ int tmp; tmp=*p; *p=*s; *s=tmp;}void exchange_sort(int *arr,int len){ for (int i=0;i<len-1;i++) { for原创 2016-10-27 22:26:32 · 521 阅读 · 0 评论 -
数字在排序数组中出现的次数(二分查找)
统计一个数字在排序数组中出现的次数。例如:排序数组{1,2,3,3,3,3,4,5},和数字3,由于3在这个数字中出现了4次,因此输出4。解法1:顺序扫描,统计该数字出现的次数,时间复杂度为O(n)。解法2:利用二分查找,找到一个数字,由于该数字可能出现多次,有可能该数字前后都有可能是所找的数字,因此向两边顺序扫描,找出第一个该数字和最后一个该数字。由于数字在长度为n的数组中有可能出现O(原创 2017-04-13 17:29:23 · 462 阅读 · 0 评论