选择排序算法(C语言)

530阅读 0评论2013-04-13 starlingruoxue
分类:C/C++


    1. 选择排序

        基本思想:
        将数组看成有两部分组成:有序部分和无序部分(有序部分后面是无序部分)
        从无序部分中找出个最小(或最大)值,与无序部分的第一个元素互换
        这个第一个元素变为有序部分的最后一个元素。

        算法实现(从小到大):

        #define swap( x, y, z ) ( (z) = (x), (x) = (y), (y) = (z) )
        int sort( int list[], int size)
        {
            int i;
            int j;
            int min;
            int temp;

            if( size <= 1 || NULL == list )
            {
                return -1;
            }


            // 扩大有序部分
            for( i = 0; i < size - 1; i ++ )
            {
                 min = i; //记录无序部分最小元素位置
                
                // 将 list[0] -list[i-1]之间的元素看成是有序部分, 将 list[i] -list[size -1]之间的元素看成是无序部分
                 for( j = i + 1; j < size; j++ )
                {
                    if( list[j] < list[min] )
                    {
                        min = j;
                    }
                    swap( list[i],  list[min], temp);
                }
            }

            return 0;
        }
        
        时间复杂度: n2
上一篇:linux samba配置问题(未知的用户名或密码错误)
下一篇:[gdb]函数堆栈乱掉的解决办法