今天看到《C#高级编程》第四版161页
for(int i = 0;i<sortArray.Length;i++)
{
for(int j = i+1;j<sortArray.Length;j++)
{
   if(sortArray[j]<sortArray[i])
{
//swap 省略……
}
}
}
n天前看一本数据结构(翻译的)书也是这么写的,晕啊  难到没有好教材了!!

解决方案 »

  1.   

    可我见到的冒泡排序时这样的啊
    egg;
    for(int i=0;i<s.length-1;i++)
    {
    for(int j=0;j<s.length-i-1;j++)
    {
    if(s[j]>s[j+1])
    {
    int temp=s[j];
    s[j]=s[j+1];
    s[j+1]=temp;
    }
    }
    }
      

  2.   

    我看到唯一的问题是,那个length有没有减一。
    感觉减不减都不影响成功。
      

  3.   

    这个是选择排序——内层的循环负责将最大的元素放到sortArray[i]。
      

  4.   

    的循环负责将最大的元素放到sortArray[i]  -->  的循环负责将最小的元素放到sortArray[i]
      

  5.   

    这个才是选择排序,LZ的明显是冒泡// selection sort function module in C
    void selectionSort(int data[], int count)
    {
            int i, j, min, temp;
            for (i = 0; i < count - 1; i++) {
                    /* find the minimum */
                    min = i;
                    for (j = i+1; j < count; j++) {
                        if (data[j] < data[min]) {
                            min = j;
                        }
                    }
                    /* swap data[i] and data[min] */
                    temp = data[i];
                    data[i] = data[min];
                    data[min] = temp;
            }
    }
      

  6.   

    to #19,#20楼:呵呵,怪不得书上可以唬人,原来可以不讲道理,只要看看表面是否有几行代码类似就行?!告诉你冒泡的道理,只要看到    if(s[j]>s[j+1])这个就知道这是冒泡了,因为它只是交换临近的两个。而看到    if(s[i]>s[j])就知道这是选择了,因为它是把i位置以后每一个元素跟i这个位置上的元素比较。
      

  7.   

    对于选择排序,是遍历i位置后边的元素记录最小元素的下标min然后最后才交换到i位置上,还是遍历时直接将最小元素交换到i位置上,这个只是运算性能的极小的差别,而且也不影响各种排序算法的时间和空间效率的基本判断。
      

  8.   

    int BubbleSort(int* pnData, int nLen)
    {
        bool isOk = false;        //设置排序是否结束的哨兵    //i从[0,nLen-1)开始冒泡,确定第i个元素
        for (int i = 0; i < nLen - 1 && !isOk; ++i)
        {
            isOk = true;        //假定排序成功        //从[nLen - 1, i)检查是否比上面一个小,把小的冒泡浮上去
            for (int j = nLen- 1; j > i; --j)
            {
                if (pnData[j] < pnData[j - 1])    //如果下面的比上面小,交换
                {
                    int nTemp = pnData[j];
                    pnData[j] = pnData[j - 1];
                    pnData[j - 1] = nTemp;
                    isOk = false;
                }
            }
        }    return 1;
    }
      

  9.   

    for(int i = 0;i<sortArray.Length;i++)
    {
    for(int j = i+1;j<sortArray.Length;j++)
    {
      if(sortArray[j]<sortArray[i])
    {
    //swap 省略……
    }
    }
    }
    ======================================
    for(int i=0;i<s.length-1;i++)
    {
    for(int j=0;j<s.length-i-1;j++)
    {
    if(s[j]>s[j+1])
    {
    int temp=s[j];
    s[j]=s[j+1];
    s[j+1]=temp;
    }
    }
    }
    =====================================================
    看看是否达到了冒泡排序的条件。