码迷,mamicode.com
首页 > 编程语言 > 详细

算法导论笔记(一) 插入排序

时间:2015-07-05 16:23:54      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

插入排序:

插入排序属于原地排序(sorted in place),使用的是增量(incremental)方法。

排序从第二个元素开始遍历。在排好序的子数组[1 .. j -1]中,将元素A[j]插入,形成排好序的子数组[1 .. j];然后,重复此操作,直到整个数组有序。 

使用for循环实现的升序插入排序:

技术分享
void insertion_sort_asc(int arr[], int len)
{
    if (len <= 0)
        throw "The length of input array is less than one.";

    if (len == 1)
        return;

    int key;
    for (int i = 1; i < len; i++)
    {
        key = arr[i];

        int j;
        for (j = i; j > -1; j--)
        {
            if (arr[j - 1] <= key)
                break;

            arr[j] = arr[j - 1];
        }

        arr[j] = key;
        show(arr, 6);
    }
}
View Code

 

使用while循环实现的升序插入排序:

技术分享
void insertion_sort_asc_with_while(int a[], int len)
{
    if (len <= 0)
        throw "The length of input array is less than one.";

    if (len == 1)
        return;

    int key;
    for (int i = 1; i < len; i++)
    {
        key = a[i];
        int j = i - 1;
        while ((j > -1) && (key < a[j]))
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = key;

        show(a, len);
    }
}
View Code

 

使用for循环实现的降序插入排序:

技术分享
void insertion_sort_des(int arr[], int len)
{
    if (len <= 0)
        throw "The length of input array is less than one.";

    if (len == 1)
        return;

    int key;
    for (int i = 1; i < len; i++)
    {
        key = arr[i];

        int j;

        for (j = i - 1; j >= 0; j--)
        {
            if (arr[j] > key)
                break;

            arr[j + 1] = arr[j];
        }

        arr[j + 1] = key;
        show(arr, len);
    }
}
View Code

 

show函数的定义如下:

技术分享
void show(int arr[], int len)
{
    for (int i = 0; i < len; i++)
        cout << arr[i] << " ";

    cout << endl;
}
View Code

 

测试代码:

技术分享
int main()
{
    int a[] = { 1, 4, 2, 7, 10, 5 };
    //insertion_sort_asc(a, 6);
    insertion_sort_asc_with_while(a, 6);
    //insertion_sort_des(a, 6);
    show(a, 6);

    return 0;
}
View Code

 

测试结果:

技术分享

 

算法导论笔记(一) 插入排序

标签:

原文地址:http://www.cnblogs.com/AmitX-moten/p/4622247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!