架构算法设计模式和编程理论互联网科技C++

小朋友学数据结构(8):直接插入排序

2018-06-19  本文已影响44人  海天一树X

(一)基本思想

在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

1-1.jpg

(二)C语言代码实现

#include<stdio.h>


void insertSort(int a[], int n)
{
    int i, j, temp;
    for (i = 1; i < n; i++)
    {
        temp = a[i];
        j = i;

        // 将大于temp的值整体后移一个单位
        while(j > 0 && a[j-1] > temp)
        {
            a[j] = a[j-1];
            j--;
        }
        a[j]=temp;
    }
}


int main()
{
    int arr[] = {57, 68, 59, 52};
    int len = sizeof(arr) / sizeof(int);
    insertSort(arr, len);
    int i = 0;
    for(; i < len; i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

运行结果:

52, 57, 59, 68

程序分析:
for循环中,
(1) i = 1, temp = a[1] = 68, j = 1, a[0] = 57, a[0] > temp不成立,不需要调整

(2)i = 2,temp = a[2] = 59,
① j = 2,a[1] = 68 > temp,执行循环a[2] = a[1] = 68,j自减。
② j = 1, a[0] = 57 > temp不成立,循环结束。
③ 最后执行a[1] = temp = 59,此时arr = {57,59,68,52}

(3)i = 3,temp = a[3] = 52
① j = 3, a[2] = 68 > temp,执行循环a[3] = a[2] = 68,j自减
② j = 2,a[1] = 59 > temp,执行循环a[2] = a[1] = 59,j自减
③ j = 1,a[0] = 57 > temo,执行循环a[1] = a[0] = 57,j自减后变为0,循环结束
④ 最后执行a[0] = temp = 52,此时a= {52, 57, 59, 68}

TopCoder & Codeforces & AtCoder交流QQ群:648202993
更多内容请关注微信公众号


wechat_public_header.jpg
上一篇下一篇

猜你喜欢

热点阅读