C#面试题常见排序算法

Posted 程序员有道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#面试题常见排序算法相关的知识,希望对你有一定的参考价值。

排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。

今天给大家介绍三种排序算法:快速排序、 希尔排序、基数排序 。

1、快速排序

快速排序是对冒泡排序的一种改进。快速排序它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。它包含了“分而治之”以及“哨兵”的思想。


原理:从数列中挑选一个数作为“哨兵”,使比它小的放在它的左侧,比它大的放在它的右侧。将要排序是数列递归地分割到最小数列,每次都让分割出的数列符合“哨兵”的规则,自然就将数列变得有序。

2、希尔排序

希尔排序算法是将数组的所有元素按照一定增量d分组,对每组内的数据实行插入排序,之后不断减小增量,每组内所包含的元素也越多,增量减少至1时,整个数组被分成一组,插入排序结束后整个数组的排序便完成。


操作步骤:

(1)在第一趟排序中,令增量d = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。

(2)按照直接插入排序的方法对每个组进行排序。

(3)在第二趟排序中,我们把上次的 d 缩小一半,即 d= d / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。

(4)按照直接插入排序的方法对每个组进行排序。

(5)在第三趟排序中,再次把 d 缩小一半,即d = d / 2 = 1。 这样相隔距离为 1 的元素组成一组,即只有一组。

(6)按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。

3、基数排序

原理:将整数按位数切割成不同的数字,然后按每个位数分别比较。


过程解析:得出最大数的位数,从低位开始桶排序。我写的这个实现代码并不简洁,但逻辑更清晰。


后面测试的时候我们就会发现,按理来说这个实现也还行吧! 但并不如想象的那么快!



 


看完本文有收获?请转发分享给更多人

关注「.net学院」,提升.Net技能 




以上是关于C#面试题常见排序算法的主要内容,如果未能解决你的问题,请参考以下文章

C#常见算法面试题小结

Java面试题常见算法总结

面试常考各类排序算法总结.(c#)

数据结构与算法-面试题汇总

Java常见算法——冒泡排序选择排序

面试必备题:用 Python 实现十大经典排序算法