面试
记录面试遇到的问题,以及解决
雾散睛明
这个作者很懒,什么都没留下…
展开
-
基数排序算法LSD实现
基数排序算法的实质是用的分类的方式。LSD 按低位开始分类,其实在按各位进行分类的时候就已经注定了 相同位数的数的相对大小关系了。lsd实现如下:#include <iostream>#include <windows.h>#include <algorithm>#include <cmath>int GetMaxValue(int* array, int length){ int maxValue = array[0]; for原创 2021-07-14 19:28:39 · 495 阅读 · 0 评论 -
堆排序算法得实现
堆排序算法得核心思想是:1 将待排序序列构造成堆得形式2 每次将堆顶和末尾空间交换值,然后再重新调整被破坏得堆结构。大致实现步骤:1 先从最后的非叶子节点开始构建最小得堆,然后再从下向上构建整个堆结构2 交换并调整堆结构代码实现如下:void Swap(int* param1, int* param2){ int tmpValue = *param1; *param1 = *param2; *param2 = tmpValue;}//将子树构造成堆void ChildTr原创 2021-07-14 15:09:27 · 240 阅读 · 0 评论 -
计数算法排序实现
计数排序的核心思想是:1 以待排序的数作为count序列的下标,以该下标出现的次数作为值。2 线性的检测count序列的不为0的项,将此项的值 放在result序列的当前index下标项中,count序列中该计数减一。代码实现如下:int GetMaxValue(int* array,int length){ int maxValue = array[0]; for(int i =1;i < length;i++) { i原创 2021-07-13 18:47:18 · 147 阅读 · 0 评论 -
快速排序的实现
快速排序的核心思路是:1 找一个基本的数,做到每次排序时,基数左边的数都比基本数小,基数右边的数都比基本数大。依次再对左右序列重复此操作。具体操作步骤大致如下:1)设置两个变量I、J,排序开始的时候I:=1,J:=N;2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];3)从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;4)从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;5)重复第3、4步,直到I=J;代码原创 2021-07-13 13:49:53 · 195 阅读 · 0 评论 -
归并算法实现
归并算法得核心思路是:1将一个序列一直对半分,直到序列得个数为12合并相邻得两个有序序列实现得方式是采用递归得方式。具体实现如下:void MergeSort(int* array,int length){ if(array != NULL && length > 0) { if(length == 1) { //递归结束条件 return; }原创 2021-07-12 17:15:28 · 215 阅读 · 0 评论 -
希尔排序算法实现
希尔算法的核心思想是:将一组数据划分为多个组分别进行插入排序。希尔排序提出了一个增量的概念,以间隔一定值进行分组,这个一定值就是 增量通常增量的值采用上一次的增量值除以2,第一次为n/2(n为数组个数)譬如:{12,54,22,11,8,10,7,8,58,3}第一次增量为n/2,这里n 为10 所以增量为10/2=5所以第一次分组后:下标关系为:{0,5}{1,6}{2,7}{3,8}{4,9}即:{12,10}{54,7}{22,8}{11,58}{8,3}第二次原创 2021-07-12 15:40:42 · 658 阅读 · 0 评论 -
插入排序算法
插入排序的核心思想是:1 向一个已有序的队列中插入数据,n个数,那么只需要插入n-1次实现如下:将第一个数看作一个自然有序的队列.#include <iostream>#include <algorithm>using namespace std;void InsertSoft(int* a,int length){ if(a != NULL && length > 0) { for(int i = 1;i &l原创 2021-07-06 22:53:11 · 192 阅读 · 2 评论 -
选择排序算法
选择排序,核心思想:1 每次选择一个最小的数排在前面,n个数,只需选择n-1次,剩余的数自然有序。实现:#include <iostream>#include <algorithm>using namespace std;void SelectSort(int a[],int length){ if(a != NULL && length) { for(int i =0;i < length -1;i++)原创 2021-07-06 01:02:32 · 76 阅读 · 0 评论 -
冒泡算法实现
冒泡算法的核心思想为:1 每1次循环,1个大数沉底;待比较数减12 比较相邻的2个元素,然后重复向后比较复杂度:当数组自然有序时为O(n)当出现自然反序时,极端最差情况时O(n2)。实现:#include <iostream>#include <algorithm>using namespace std;void BulldingSort(int* a,int length){ int nCount = 0; if(a != NULL &&a原创 2021-07-06 00:34:25 · 213 阅读 · 0 评论 -
循环队列的实现
我认为用数组做队列,首先要考虑的是队列的容量问题。解决队列的容量大家都是用循环队列的方式。但是使用循环队列需要考虑的问题是下标的控制。还有就是线程安全的问题。不能够出现对用一位置多次入队,多次出队问题。再考虑到以上问题的同时,在下又想到一个问题就是 一个线程入队的同时另一个线程能不能出队那?要衡量这个问题就需要考虑,当同时出现时,这个线程的操作是否影响另一个线程的操作问题。思虑再三,个人觉得出队...原创 2020-02-21 14:13:48 · 353 阅读 · 0 评论 -
面试题目(1)如何从一组数据中怎样最快找到第二大数?
首先定义max变量以存储最大值,secmax存储第二大的值。先取出数组中前两个值,将最大的存储在max中,小的存储在secmax中。接下来 在循环中 取出数组的元素a[i].起初先判断a[i]是否是这三个数中最大的,如果是那么将max 记录a[i]的值,secMax 记录先前的max 的值。如果不是,那么判断a[i]是否是这个三个数中的第二大的值,如果是secmax记录该值,否则不操作。代码...原创 2020-02-20 12:42:02 · 574 阅读 · 0 评论