学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]

关于冒泡排序,选择排序,插入排序,希尔排序[资料收集]  以下资料来源与网络

冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到了第一个位置上(或最后位置),之后不考虑选出的元素,对剩余的元素进行循环的排列。

举一个例子:我们在火车站买票有军人、记者、两会代表优先的原则,大家排队买票,这时来了一个两会代表买票,他从后往前问买票的人是否是军人、记者、两会代表,如果不是就和普通老百姓交换位置

 

        /// <summary>
        /// 冒泡排序[顺序]
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static string BubbleSorterOrderByAsc(int[] list)
        {
            int i, j, temp;
            bool done = false;

            j = 1;
            while ((j < list.Length) && (!done))
            {
                done = true;
                for (i = 0; i < list.Length - j; i++)
                {
                    if (list[i] > list[i + 1])
                    {
                        done = false;
                        temp = list[i];
                        list[i] = list[i + 1];
                        list[i + 1] = temp;
                    }
                }
                j++;
            }
            string retstr = "冒泡排序[顺序]<br/>";
            for (i = 0; i < list.Length; i++)
            {
                retstr += list[i]+"<br/>";
               
            }
            return retstr;
        }
        /// <summary>
        /// 冒泡排序[倒序]
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static string BubbleSorterOrderByDesc(int[] list)
        {
            int i, j, temp;
            bool done = false;

            j = 1;
            while ((j < list.Length) && (!done))
            {
                done = true;
                for (i = 0; i < list.Length - j; i++)
                {
                    if (list[i] < list[i + 1])
                    {
                        done = false;
                        temp = list[i];
                        list[i] = list[i + 1];
                        list[i + 1] = temp;
                    }
                }
                j++;
            }
            string retstr = "冒泡排序[倒序]<br/>";
            for (i = 0; i < list.Length; i++)
            {
                retstr += list[i] + "<br/>";

            }
            return retstr;
        }

选择排序:

简单选择排序:每次对剩余的数据中选择最小的和剩余的这些数据中的第一个进行交换。

举一个例子:毕业了,大家都在照毕业照,大家站在那里参差不齐,照相师傅一看,这可不行啊,瞅了一眼一下看到了最高的,好了,你就站到第一个,接着瞅剩下最高的,站第二个……最后就成了一个由高到低的队列

 

 

/// <summary>
        /// 选择排序
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static string SelectionSorter(int[] list)
        {
            int min;
            for (int i = 0; i < list.Length - 1; i++)
            {
                min = i;
                for (int j = i + 1; j < list.Length;j++)
                {
                    if (list[j] < list[min])
                        min = j;
                }
                int t = list[min];
                list[min] = list[i];
                list[i] = t;
            }
            string retstr = "选择排序<br/>";
            for (int i = 0; i < list.Length; i++)
            {
                retstr += list[i] + "<br/>";

            }
            return retstr;
        }

插入排序:直接插入排序:插入到已经排好序的数列中的一个数据。

举一个形象的例子:在一个排好队打饭的对列中,张三是后来了,直接插到了队列中李四的后边,因为张三和李四是哥们儿。

        /// <summary>
        /// 插入排序
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static string InsertionSorter(int[] list)
        {
           for(int i=1;i<list.Length;i++)
           {
               int t=list[i];
               int j = i;
               while ((j > 0) && (list[j - i] > t))
               {
                   list[j] = list[j - i];
                   --j;
               }
               list[j] = t;
           }
           string retstr = "插入排序<br/>";
           for (int i = 0; i < list.Length; i++)
           {
               retstr += list[i] + "<br/>";

           }
           return retstr;
        }

希尔排序:将所有的数据分组,小组内进行排序,之后重新分组,组内数据增多,重新排序(每个步骤都使用直接插入排序)。

举一个形象的例子:还是排队打饭,学校有好多班级,不能所有班级都一起打,先按班级(分组)排好队,最后所有的班级再组成一个大组,再一个一个的排着打饭。 

        /// <summary>
        /// 希尔排序
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static string ShellSorter(int[] list)
        {
            int inc;
            for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1);
            for (; inc > 0; inc /= 3)
            {
                for (int i = inc + 1; i <= list.Length; i += inc)
                {
                    int t = list[i - 1];
                    int j = i;
                    while ((j > inc) && (list[j - inc - 1] > t))
                    {
                        list[j - 1] = list[j - inc - 1];
                        j -= inc;
                    }
                    list[j - 1] = t;
                }
            }
            string retstr = "希尔排序<br/>";
            for (int i = 0; i < list.Length; i++)
            {
                retstr += list[i] + "<br/>";

            }
            return retstr;

        }

MVC 调用代码:

            //数组
            int[] numberlist=new int[5]{12,3,99,16,53};
            //冒泡顺序Test
            string ret1str = StringHelper.BubbleSorterOrderByAsc(numberlist);
            //冒泡逆序Test
            string retstr = StringHelper.BubbleSorterOrderByDesc(numberlist);
            //选择排序Test
            string ret2str = StringHelper.SelectionSorter(numberlist);
            //插入排序Test
            string ret3str = StringHelper.InsertionSorter(numberlist);
            //希尔排序Test
            string ret5str = StringHelper.ShellSorter(numberlist);

            ViewBag.BubbleSorter = ret5str;
  @{@MvcHtmlString.Create(ViewBag.BubbleSorter);}

资料来源:http://blog.csdn.net/xudepeng0813/article/details/7591883

 

 

 声明:本博客高度重视知识产权保护,发现本博客发布的信息包含有侵犯其著作权的链接内容时,请联系我,我将第一时间做相应处理,联系邮箱ffgign@qq.com


作者:Mark Fan (小念头)    
来源:http://cube.cnblogs.com
说明:未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有疑问,可以通过 ffgign@qq.com 联系作者,本文章采用 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可

知识共享许可协议

 

 

 

posted @ 2013-12-03 09:36  凡酷软件  阅读(254)  评论(0编辑  收藏  举报