C#面试题常见算法
Posted 程序员有道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#面试题常见算法相关的知识,希望对你有一定的参考价值。
排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。
今天给大家介绍三种排序算法:冒泡排序(o(n2)),选择排序(o(n2)),插入排序(o(n2))
1、选择排序是我觉得最简单暴力的排序方式了。
以前刚接触排序算法的时候,感觉算法太多搞不清,唯独记得选择排序的做法及实现。
原理:找出参与排序的数组最大值,放到末尾(或找到最小值放到开头)
过程解析:将剩余数组的最小数交换到开头
2、冒泡排序
冒泡排序是笔试面试经常考的内容,虽然它是这些算法里排序速度最慢的(汗),后面有测试为证。
原理:从头开始,每一个元素和它的下一个元素比较,如果它大,就将它与比较的元素交换,否则不动。
这意味着,大的元素总是在向后慢慢移动直到遇到比它更大的元素。所以每一轮交换完成都能将最大值冒到最后。
过程解析:中需要注意的是j<i,每轮冒完泡必然会将最大值排到数组末尾,所以需要排序的数应该是在减少的。
3.插入排序
插入排序是一种对于有序数列高效的排序。非常聪明的排序。只是对于随机数列,效率一般,交换的频率高。
原理:通过构建有序数列,将未排序的数从后向前比较,找到合适位置并插入。
过程解析:将要排序的数(索引为i)存储起来,向前查找合适位置j+1,将i-1到j+1的元素依次向后
移动一位,空出j+1,然后将之前存储的值放在这个位置。
这个方法写的不如维基上的简洁清晰,由于合适位置是j+1所以多出了对j==0的判断,但实际效率影响无差别。
建议比照维基和我写的排序,自行选择。
看完本文有收获?请转发分享给更多人
关注「.net学院」,提升.Net技能
以上是关于C#面试题常见算法的主要内容,如果未能解决你的问题,请参考以下文章