重温排序算法(一)

   最近闲着无聊,想到算法是个挺重要的事情,于是重温大学时学的数据结构。因此,把复习的算法执行了一遍,把算法也贴到这里,以备所需时查阅。

我准备要写的主要是内部排序,内部排序主要有插入排序(直接插入排序和希尔排序), 交换排序(冒泡排序和快速排序),选择排序(树型选择排序、堆排序、直接选择排序)以及归并排序和基数排序。我准备把这些算法都用C实现一下,今天主要是插入排序。

  1.   首先是最简单的插入排序
    int _tmain(int argc, _TCHAR* argv[])
    {
        
    int a[7= {0493865977612};
        
    int j;
        
    for(int i = 2; i <= 6; i++//进行n-1趟排序
        {
            
    if(a[i] >= a[i-1])
            {
                
    continue;
            }
            a[
    0= a[i]; //复制为哨兵
            a[i] = a[i-1];

            
    for( j = i - 2; a[j] > a[0] ; j--//值若小,则前移,因为有哨兵的缘故,所以不必担心越界:)
            {
                a[j
    +1= a[j];
            }
           a[j
    +1= a[0];
        }

        
    for(int i = 1; i < 7; i++)
        {
            printf(
    "%u  ",a[i]);
        }

        scanf(
    "%c");
    }

    从空间来看,它只需要一个记录的辅助空间,而时间复杂度为:0(n2)。

     适用情况:1.元素个数较少 2 基本有序时

posted on 2011-04-27 12:10  BarryHou  阅读(198)  评论(0编辑  收藏  举报