Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53288
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 176
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-05 15:17
个人简介

活在当下 眺望未来

文章分类

全部博文(16)

文章存档

2013年(16)

我的朋友

分类: C/C++

2013-04-13 10:50:27


    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
阅读(497) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~