• 直接插入排序


    image

    算法描述:

    1.从第一个元素开始,该元素可以认为已经被排序;(j=0的那个元素)

    2.取出下一个元素,在已经排序的元素序列中从后向前扫描;

    10, 5, 2, 4, 7

    5, 10, 2, 4, 7

    2, 5, 10, 4, 7

    2, 4, 5, 10, 7

    2, 4, 5, 7, 10

    3.如果元素(已排序)大于新元素,将该元素移到下一位置;(10,5 => 5,10)

    4.重复步骤3,直到已经找到已排序元素小于或等于新元素的位置;

    5.将新元素插入到该位置中;

    6.重复步骤2。

    #include<stdio.h>
    
    void insertionsort(int a[],int n)
    {
        int i,j,key;
        for ( j = 1;j < n;j++)
        {
            key = a[j];
            i = j-1;
            while ( i >= 0 && a[i]>key)
            {
                a[i+1]=a[i];
                i -= 1;
            }
            a[i+1]=key;
        }
    }
    int main()
    {
        int a[]={10,5,2,4,7};
        insertionsort(a,5);
        
        for ( int i = 0;i < 5;i++)
            printf("%d ",a[i]);
        return 0;
    }
    View Code

    插入排序,好比是洗扑克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的适当位置,例如:
    排序前: [92], 77, 67, 8, 6, 84, 55, 85, 43, 67  -- 将数组分为两部分,第一个元素为一组
    第 1 次排序:[77 92] 67 8 6 84 55 85 43 67     -- 将后一组的第一个元素 77 插入前一组的适当位置
    第 2 次排序:[67 77 92] 8 6 84 55 85 43 67     -- 将后一组的第一个元素 67 插入前一组的适当位置
    第 3 次排序:[8 67 77 92] 6 84 55 85 43 67     -- 将后一组的第一个元素 8 插入前一组的适当位置 
    第 4 次排序:[6 8 67 77 92 84] 55 85 43 67      -- 将后一组的第一个元素 6 插入前一组的适当位置
    第 5 次排序:[6 8 67 77 84 92 55] 85 43 67      -- 将后一组的第一个元素 84 插入前一组的适当位置
    第 6 次排序:[6 8 55 67 77 84 92 85] 43 67      -- 将后一组的第一个元素 55 插入前一组的适当位置
    第 7 次排序:[6 8 55 67 77 84 85 92 43] 67      -- 将后一组的第一个元素 85 插入前一组的适当位置
    第 8 次排序:[6 8 43 55 67 77 84 85 92] 67      -- 将后一组的第一个元素 43 插入前一组的适当位置
    第 9 次排序:[6 8 43 55 67 67 77 84 85 92]      -- 将后一组的第一个元素 67 插入前一组的适当位置

    #include <stdio.h>
    #define len 5
    int a[len] = { 10, 5, 2, 4, 7 };
    void insertion_sort(void)
    {
    int i, j, key;
    for (j = 1; j < len; j++)
    {
    printf("%d, %d, %d, %d, %d ", a[0], a[1], a[2], a[3], a[4]);
    key = a[j];
    i = j - 1;
    while (i >= 0 && a[i] > key)
    {
    a[i+1] = a[i];
    i--;
    }
    a[i+1] = key;
    }
    printf("%d, %d, %d, %d, %d ", a[0], a[1], a[2], a[3], a[4]);
    }

    int main()
    {
    insertion_sort();
    return 0;
    }

    #include <stdio.h>
    #define len 5
    int a[len] = { 10, 5, 2, 4, 7 };
    void insertion_sort(void)
    {
    int i, j, key;
    for (j = 1; j < len; j++)
    {

    key = a[j];
    i = j - 1;
    while (i >= 0 && a[i] > key)
    {
    a[i+1] = a[i];
    i--;
    }
    a[i+1] = key;
    }
    printf("%d, %d, %d, %d, %d ", a[0], a[1], a[2], a[3], a[4]);
    }

    int main()
    {
    insertion_sort();
    return 0;
    }

    #include <stdio.h>
    #define len 5
    int a[len] = { 10, 5, 2, 4, 7 };
    void insertion_sort(void)
    {
    int i, j, key;
    for (j = 1; j < len; j++)
    {
    key = a[j];
    i = j - 1;
    while (i >= 0 && a[i] > key)
    {
    a[i+1] = a[i];
    i--;
    }
    a[i+1] = key;
    }
    }

    int main()
    {
    insertion_sort();

    printf("%d, %d, %d, %d, %d ", a[0], a[1], a[2], a[3], a[4]);
    return 0;
    }

  • 相关阅读:
    Using Change Management and Change Control Within a Project
    swift3.0 label改变行间距
    swift清理缓存
    Alamofire的get请求,post请求,以及上传字典
    swift跳转时隐藏tabbar,跳回时显示
    swift获取当前的Version
    swift回收键盘
    OC中常用的设计模式
    关于iOS多线程
    理解 : UDID、UUID、IDFA、IDFV
  • 原文地址:https://www.cnblogs.com/2014acm/p/3916296.html
Copyright © 2020-2023  润新知