注册 登录
编程论坛 C语言论坛

选择排序 请问这里minIndex=passcount是什么作用呀

komorebi0110 发布于 2019-11-26 14:26, 2256 次点击


//  Sorts data[length] into ascending order using selection sort

{   ItemType    temp ;

  int                 passCount ;

  int                 sIndx ;

  int                 minIndx ;   // index of minimum so far

   

     for  ( passCount = 0 ; passCount < length - 1 ; passCount++ )

  {

  minIndx = passCount ;

     // find index of smallest of data [ passCount . . length-1 ]

  for ( sIndx = passCount + 1 ; sIndx < length ; sIndx++ )

       if  ( data [ sIndx ] < data [ minIndx ] )

  minIndx = sIndx ;

  temp = data [ minIndx ] ;  // swap

  data [ minIndx ] = data [ passCount ] ;

  data [ passCount ] = temp ;

  }

}





那样的话下标不就变化了吗
4 回复
#2
komorebi01102019-11-26 14:30
还有一个问题,为什么不能直接把minindex的值赋给passcount,而要引入一个临时值呢
#3
rjsp2019-11-26 15:12
空格挺吓人的,我只是顺路将代码排版一下
程序代码:
// 使用“选择排序”进行“升序”排列
void selection_sort( ItemType data[], size_t length )
{
    for( size_t i=0; i<length-1; ++i )
    {
        // 找到 data[i]……data[length-1] 中最小值,记录其下标
        size_t minIndex = i;
        for( size_t j=i+1; j<length; ++j )
            if( data[j] < data[minIndex] )
                minIndex = j;

        // 交换 data[i] 和 data[minIndex]
        ItemType temp = data[minIndex];
        data[minIndex] = data[i];
        data[i] = temp;
    }
}

#4
ZJYTY2019-11-26 15:23
回复 2楼 komorebi0110
可以尝试按自己的思路进行操作,然后看看是什么效果
#5
komorebi01102019-11-28 17:58
作业里有冒泡排序,大概用这个换了一下,通过了
1