打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
小小c#算法题

小小c#算法题 - 0 - 单循环冒泡排序

本来一直想写这篇文章来着,但自己平时瞎忙,今天碰巧有人问了,于是就把它写出来。

一个循环并不是说时间复杂度就是O(n), 冒泡排序的时间复杂度只能是O(n*n). 所以说如果有这么一道题,它考的只是一个编程技巧,并不是说有什么更高效率的算法。

而且用一个循环写出来的算法没有用两个写出来的算法高效。因为要作一些额外的计算。

下面把传统两个循环嵌套的代码和只用一个循环的代码贴出来了。

代码只经过简单测试。不过基本思想是很清楚的了。

 

1. 原始的两个循环嵌套的冒泡排序 

        static void Sort(int[] array)
        {
            int length = array.Length;
            for (int i = 0; i < length - 1; i++)
            {
                for (int j = 0; j < length - 1 - i; j++)
                {
                    if (array[j] > array[j + 1])
                    {
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
        }

 

2. 只用一个循环的冒泡排序

这里充分利用了除操作与取余操作的关系这一技巧。如果你理解了《编程之美》第二章 将帅问题的解决方案的精髓的话,那么下面的代码就很容易理解了。

        static void SortOneLoop(int[] array)
        {
            int length = array.Length;
            int total = length * length - 1;

            while (total / length > 0)
            {
                if (total % length >= length - total / length && array[total % length] < array[total % length - 1])
                {
                    int temp = array[total % length];
                    array[total % length] = array[total % length - 1];
                    array[total % length - 1] = temp;
                }

                total--;
            }
        }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
据说研究算法的效率很可怕(一)
C#数据结构与算法揭秘17
希尔排序
Java常见排序算法之插入排序
一遍记住Java常用的八种排序算法与代码实现
在顺序存储模式下的三种算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服