C#面试题常见排序算法
Posted 程序员有道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#面试题常见排序算法相关的知识,希望对你有一定的参考价值。
排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。
今天给大家介绍三种排序算法:快速排序、 希尔排序、基数排序 。
快速排序是对冒泡排序的一种改进。快速排序它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。它包含了“分而治之”以及“哨兵”的思想。
原理:从数列中挑选一个数作为“哨兵”,使比它小的放在它的左侧,比它大的放在它的右侧。将要排序是数列递归地分割到最小数列,每次都让分割出的数列符合“哨兵”的规则,自然就将数列变得有序。
希尔排序算法是将数组的所有元素按照一定增量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)按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。
原理:将整数按位数切割成不同的数字,然后按每个位数分别比较。
过程解析:得出最大数的位数,从低位开始桶排序。我写的这个实现代码并不简洁,但逻辑更清晰。
后面测试的时候我们就会发现,按理来说这个实现也还行吧! 但并不如想象的那么快!
看完本文有收获?请转发分享给更多人
关注「.net学院」,提升.Net技能
以上是关于C#面试题常见排序算法的主要内容,如果未能解决你的问题,请参考以下文章