none
数组排序问题 RRS feed

  • 问题

  • 请问下面的排序方法,是不是 高效的 冒泡排序方法 :

        还麻烦各位解释一下, j为什么要从1开始,i 从0开始,   myarry.Length - 1为什么要减1, 写上注释,谢谢

               int[] myarry = { 16, 12, 23, 25, 29, 30 };

                for (int j = 1; j < myarry.Length; j++)
                {
                    for (int i = 0; i < myarry.Length - 1; i++)
                    {
                        if (myarry[i] < myarry[i + 1])
                        {
                            int temp = myarry[i];
                            myarry[i] = myarry[i + 1];
                            myarry[i + 1] = temp;                    
                        }
                    }
                }

                for (int k = 0; k < myarry.Length; k++)
                {
                    Response.Write(myarry[k] + ",");
                }

    2010年3月7日 4:41

答案

  • 你好!
         你可以参考这个实例,希望对你有帮助!protected int[] bubbleUp(int[] array)
        {
            for (int i = 0; i < array.Length-1; i++)//要冒泡次数
            {
                for (int j = 0; j < array.Length-1-i; j++)//每次冒泡具体比较过程
                {
                    if (array[j] > array[j+1])
                    {
                        int temp=array[j+1];
                        array[j+1]=array[j];
                        array[j] = temp;
                    }
                }
            }
            return array;
        }
    周雪峰
    2010年3月7日 7:41
    版主

全部回复

  • 这个问题,是不是太什么了...

    2010年3月7日 7:22
  • 这不是人能否看出高效  你只能用电脑不断测试和改善才能看出是否高效
    介绍一本 http://www.china-pub.com/195334#ml  c#算法

    2010年3月7日 7:35
  • 你好!
         你可以参考这个实例,希望对你有帮助!protected int[] bubbleUp(int[] array)
        {
            for (int i = 0; i < array.Length-1; i++)//要冒泡次数
            {
                for (int j = 0; j < array.Length-1-i; j++)//每次冒泡具体比较过程
                {
                    if (array[j] > array[j+1])
                    {
                        int temp=array[j+1];
                        array[j+1]=array[j];
                        array[j] = temp;
                    }
                }
            }
            return array;
        }
    周雪峰
    2010年3月7日 7:41
    版主
  • 下面是我根据自己的理解,加上的注释, 再麻烦大家看一下,不对的地方望修正,谢谢      
        



               int[] myarry = { 16, 12, 23, 25, 29, 30 };
                int counter1 = 0;
                int counter2 = 0;
                for (int i = 1; i < myarry.Length; i++)  //从第一位(12)开始循环到最后一位(30) 
                {

                    for (int j = 0; j < myarry.Length - 1; j++) //从第0位(16)开始循环到倒数第二位(29) 
                    {
                        if (myarry[j] < myarry[j + 1])  //myarry[j]是前五位数,myarry[j + 1]是后五位数,对myarry[j]中的元素与myarry[j + 1]中的元素进行比较
                        {
                            int temp = myarry[j]; //如果条件表达式成立就把myarry[j]数组赋给temp变量

                            myarry[j] = myarry[j + 1]; //如果条件表达式成立就把myarry[j + 1] 数组元素赋给 myarry[j];

                            myarry[j + 1] = temp; //如果条件表达式成立就把myarry[j]  数组元素赋给myarry[j + 1] ;
                            counter1++;
                        }
                        counter2++;
                    }
                }
                Console.Write("循环了" + counter2 + "次,交换了" + counter1 + "次");

                foreach (int n in myarry)
                {
                    Console.Write(n.ToString() + ",");
                }

    2010年3月7日 9:01