马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

排序算法(一)

  [复制链接]
查看6268 | 回复5 | 2013-3-6 22:18:15 | 显示全部楼层 |阅读模式
之前关于扩展数组的时候,想到了一个排序的Sort方法,然后就联想到把常用的排序算法都总结一下吧。毕竟面试的时候对于算法还是有一定要求的。关于算法的时间复杂度和空间复杂度就不在这里面介绍了,可以参考相关的资料。先给出比较简单的三个,都不适合大规模的数据排序。
[C#] 纯文本查看 复制代码
 /// <summary>
        /// 插入排序,适合千级别或是更小级别的排序,不推荐大数据的排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="originArray"></param>
        /// <returns></returns>
        public static T[] Insert_Sort<T>(T[] originArray, Compare<T> compare)
        {
            if (originArray.Length == 0 || originArray.Length == 1)
            {
                return originArray;
            }

            for (int i = 1; i < originArray.Length; i++)
            {
                T temp = originArray[i];
                int tempIndex = i;

                while (tempIndex > 0 && compare(temp, originArray[tempIndex-1]))
                {
                    originArray[tempIndex] = originArray[tempIndex - 1];
                    tempIndex--;
                }
                originArray[tempIndex] = temp;
            }

            return originArray;
        }

        /// <summary>
        /// 冒泡法,比较简单的排序算法,效率比较低,不适合大量数据的排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="originArray"></param>
        /// <param name="compare"></param>
        /// <returns></returns>
        public static T[] Bubble_Sort<T>(T[] originArray, Compare<T> compare)
        {
            if (originArray.Length == 0 || originArray.Length == 1)
            {
                return originArray;
            }

            for (int i = 0; i < originArray.Length; i++)
            {
                for (int j = originArray.Length - 1; j > i; j--)
                {
                    if (compare(originArray[j], originArray[j - 1]))
                    {
                        T temp = originArray[j];
                        originArray[j] = originArray[j - 1];
                        originArray[j - 1] = temp;
                    }
                }
            }

            return originArray;
        }

        /// <summary>
        /// 选择排序,和冒泡排序比较像,同样不适合大数据的排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="originArray"></param>
        /// <param name="compare"></param>
        /// <returns></returns>
        public static T[] Select_Sort<T>(T[] originArray, Compare<T> compare)
        {
            if (originArray.Length == 0 || originArray.Length == 1)
            {
                return originArray;
            }

            for (int i = 0; i < originArray.Length; i++)
            {
                for (int j = i + 1; j < originArray.Length; j++)
                {
                    if (compare(originArray[j], originArray[i]))
                    {
                        T temp = originArray[i];
                        originArray[i] = originArray[j];
                        originArray[j] = temp;
                    }
                }
            }

            return originArray;
        }


ibcadmin | 2013-3-7 10:24:56 | 显示全部楼层
我想给你个版主,
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
hebutyll | 2013-3-7 10:33:51 | 显示全部楼层
ibcadmin 发表于 2013-3-7 10:24
我想给你个版主,

好的,谢谢啊,我也希望能把论坛弄得活跃起来,让更过的人都参与进来
chao2332601 | 2013-6-16 01:35:35 | 显示全部楼层
谢谢分享!!!
chao2332601 | 2013-6-16 05:03:57 | 显示全部楼层
谢谢分享!!!
881966 | 2018-12-4 20:34:57 | 显示全部楼层
谢谢分享,学习学习
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则