首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

只循环一次的冒泡排序法-求解解决办法

2013-01-23 
只循环一次的冒泡排序法---求解如题,是否只循环一次就能实现冒泡排序,一般情况下都是需要嵌套循环2次的int

只循环一次的冒泡排序法---求解
如题,是否只循环一次就能实现冒泡排序,一般情况下都是需要嵌套循环2次的

int[] temps = { 10, 22, 4, 50, 100, 65, 56, 98, 105, 200, 900, 1 };


求大神祝我证道
[解决办法]
http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95
[解决办法]
这个是可以有的。
这里的一次循环并不是说时间复杂度就是O(n),冒泡排序的时间复杂度肯定是O(n2)的。
这道题考的只是一个编程技巧而已。
一直想写篇博客来着,不过没时间写。


        //two loops
        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;
                    }
                }
            }
        }

        //one loop
        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--;
            }
        }


[解决办法]
http://www.cnblogs.com/CSharpSPF/archive/2012/03/14/2396728.html
博客也写了一下,可以去看看。
[解决办法]
不可能吧!
------解决方案--------------------


引用:
这个是可以有的。
这里的一次循环并不是说时间复杂度就是O(n),冒泡排序的时间复杂度肯定是O(n2)的。
这道题考的只是一个编程技巧而已。
一直想写篇博客来着,不过没时间写。
C# code

        //two loops
        static void Sort(int[] array)
        {
            int length = arra……
我一贯反对这种做法。没有带来任何改进,仅仅为了实现毫无意义的一种要求而把程序搞得非常难读,而且还导致运行效率大幅度下降。这样的技巧应该废弃。
[解决办法]
循环一次解决不了!...至少我没遇到,希望LZ发现  分享下
[解决办法]
有这必要吗?是技巧而已还是项目需要?
[解决办法]
1234
[解决办法]
谁说循环一次不行

            int[] temps = { 10, 22, 4, 50, 100, 65, 56, 98, 105, 200, 900, 1 };
            int[] result = new int[1000];
            for (int i = 0; i < temps.Length; i++)
            {
                result[temps[i]] = temps[i];
            }
            for (int i = 0; i < result.Length; i++)
            {
                if (result[i]!=0) Console.WriteLine(result[i]);
            }

[解决办法]
如果是实际项目需要,3楼的做法很实用。
#20楼虽然理论上可用,但是不觉得很浪费资源吗?如果其中一个最大的数是1亿,那按#20楼的做法是分配那么1亿个长度的数组空间吗?
[解决办法]
引用:
谁说循环一次不行
C# code

            int[] temps = { 10, 22, 4, 50, 100, 65, 56, 98, 105, 200, 900, 1 };
            int[] result = new int[1000];
            for (int i = 0; i < temps.Length; i++)
      ……
解决什么了?拿到这个结果的用户会直接崩溃掉的。
[解决办法]
引用:
如果是实际项目需要,3楼的做法很实用。
#20楼虽然理论上可用,但是不觉得很浪费资源吗?如果其中一个最大的数是1亿,那按#20楼的做法是分配那么1亿个长度的数组空间吗?

没错,这样既没效率又浪费空间,只是根据问题给出的一个答案而已。
[解决办法]
只循环一遍...其实你建立一个 (On2) 的循环不是一样的么...
( ⊙ o ⊙ )
[解决办法]
引用:

引用:

这个是可以有的。
这里的一次循环并不是说时间复杂度就是O(n),冒泡排序的时间复杂度肯定是O(n2)的。
这道题考的只是一个编程技巧而已。
一直想写篇博客来着,不过没时间写。
C# code

//two loops
static void Sort(int[] array)
{
int length = ……


真正的项目中我估计没人会去用一个循环写,我博客中也提到了这样效率较低。
但这应该只是一道面试题,这个技巧微软考过。
还有那些什么井盖的问题给实际项目也扯不上关系,但面试官就可能出这些问题。
归根到底,面试题而已。淡定...
[解决办法]
引用:
谁说循环一次不行
C# code

            int[] temps = { 10, 22, 4, 50, 100, 65, 56, 98, 105, 200, 900, 1 };
            int[] result = new int[1000];
            for (int i = 0; i < temps.Length; i++)
      ……

这是桶排序,不是冒泡排序。
[解决办法]
别说冒泡 我就没听说过O(n)的排序算法
[解决办法]
//int[] strAry = { 1, 5, 2, 4, 9, 6, 8, 10, 20, 16, 30, 11, 11 };
        //var query =
        //    from vall in strAry
        //    orderby vall descending
        //    select vall;
        //foreach(int s in query)
        //{
        //    Response.Write(s.ToString() + "-");
        //}

Linq 也 可以. . .....
[解决办法]
三楼 四楼的 方法 都可以,, 
[解决办法]
11楼的方法学习了。
不要一味拘泥于“实用性”。如果只知道3楼的写法,充其量只是熟悉api的用法而已。11楼的方法看似无用,却能拓展思维。长远来说,这更重要
[解决办法]
如果你是想问技巧的,这个是可以有的
如果你是想把复杂度降为O(n),这个全世界的人都在盼着,如果你能研究出来,将名留千古,永载史册。
[解决办法]
冒泡排序只循环一次,这可以用两个字回答:扯淡。
[解决办法]
如果要卖弄一些“技巧”,并且非要说这样就是一个循环,我可以给出通用解法。但是如果你的老师把这个看成什么值得拿来玩弄的东西,我只能说他很低级。

for (int i = 0; i < 10; i++)
    for (int j = 0; j < 10; j++)
        Console.WriteLine("i = {0}, j = {0}", i, j);

=>
for (int i = 0, j = 0; i < 10; i += (((j = (++j % 10)) == 0) ? 1 : 0))
    Console.WriteLine("i = {0}, j = {0}", i, j);

[解决办法]
引用:
别说冒泡 我就没听说过O(n)的排序算法



很多人喜欢投机取巧地学习,比如有人说看几重循环就是复杂度。
[解决办法]
也许作为一种思维训练还是可以的。作为编程技巧的话,这样的做法有害无益。
[解决办法]
不要在这种问题上面纠结了,没意思,搞点有意义的事情吧。编程不仅仅是有循环。
[解决办法]
纠结这些,还不如去多做点实际的事情。
[解决办法]
LZ 当用递归方法时,有可能可以用一次循环可以排序,但是这里的一次循环是只写一个循环语句而以,理论上一个排序用一次循环来实现是不正常的
[解决办法]
你可以用 插入排序嘛。。。一次循环可以排好了。

热点排行