守望

Here we go!

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 6 文章 :: 0 评论 :: 0 Trackbacks
顾名思义,遍历待排序的列表,把当前元素插入到它应该在地位置。
Contiguous version:
 1template <class Record>
 2void InsertionSort(Record *array, int count)
 3{
 4    // "fu" means first unsorted
 5    for (int fu = 1; fu < count; ++fu)
 6    {
 7        if (array[fu] < array[fu - 1])
 8        {
 9            int pos = fu;
10            Record current = array[fu];
11            do
12            {
13                array[pos] = array[pos - 1];
14                --pos;
15            }
 while (pos > 0 && array[pos - 1> current);
16            array[pos] = current;
17        }

18    }

19}

Linked Version:

template <class Record>
void InsertionSort(Node<Record> *list)
{
    if (list != NULL)
    {
        // "ls" means last sorted
        Node<Record> *ls = list;
        while (ls->next != NULL)
        {
            // "fu" means first unsorted
            Node<Record> *fu = ls->next;
            if (fu->data < list->data)
            {
                ls->next = fu->next;
                fu->next = list;
                list = fu;
            }
            else
            {
                Node<Record> *itr = list;
                Node<Record> *cur = itr->next;
                while (fu->data > cur->data)
                {
                    itr = cur;
                    cur = itr->next;
                }


    if (fu == cur)
    {
        ls = fu;
    }
                else
                {
        ls->next = fu->next;
                    fu->next = cur;
                    itr->next = fu;
                }
            }
        }
    }
}




时间复杂度:
1/4n^2 + O(n)

稳定性:
稳定
posted on 2011-10-03 13:29 winter 阅读(98) 评论(0)  编辑 收藏 引用 所属分类: 算法