从字面上理解,就是通过不断地选择数组元素,从而达到排序的目的。我插入排序类似,假设第i(i<n)个数组元素data[0]是最大的(从大到小排序),然后依次扫描i + 1 到 n - 1的元素,找到比第i个元素大的元素。最后将它们交换。
算法的时间复杂度为 O(n^2)。

算法的实现如下

#include  < stdio.h > 

void  output_array( int  data[],  int  n)
{
     int  i;
     for (i  =   0 ; i  <  n; i ++ )
        printf( " %d  " , data[i]);
    printf( " \n " );
}
void  swap( int   * a,  int   * b)
{
     int  x;
    x  =   * a;
     * a  =   * b;
     * b  =  x;
}
// 算法实现 
void  selection( int  data[],  int  b,  int  e)
{
     int  i, j, high_index;
     for (i  =  b; i  <  e; i ++ )
    {
        high_index  =  i;
         for (j  =  e; j  >  i; j -- )
             if (data[j]  >  data[high_index])
                high_index  =  j;
        swap( & data[i],  & data[high_index]);
    }
}
int  main()
{
     int  data[]  =  { 5 ,  3 ,  1 ,  665 ,  77 ,  66 ,  44 ,  11 ,  10 ,  9 ,  8 ,  6 };
    output_array(data,  12 );
    selection(data,  0 ,  11 );
    output_array(data,  12 );
     return   0 ;
}