C 语言直接插入排序

思路

首先将无序队列的第一个元素,看作已经排好序。然后拿无序队列的第二个元素与第一个元素进行比较,(此处考虑升序排列的情况下),如果第二个元素小于第一个元素,则将第二个元素插入到第一个元素的左边。然后循环进行,直到无序队列的最后一个元素比较完成。因为涉及到数据位置的移动、交换,需要一个中间变量。

实现

/*
 @function: insert_sort
 @functional: insert sort
 */
static void insert_sort(void)
{
    int arry[] = {13, 12, 5, 3, 14, 90, 0, 11, 23, 9, 15, 99, 100, 96,3};
    int arry_len = sizeof(arry)/sizeof(arry[0]);
    int number_of_times = 0;

    for(int i = 0; i < arry_len; i++)
        printf("%d ", arry[i]);
    printf("\n");

    for (int i = 1; i < arry_len; i++) {
        int index = i;
        for (int j = index - 1; j >= 0; j--) {
            int temp = arry[index];
            if (temp < arry[j]) {
                arry[index] = arry[j]; 
                arry[j] = temp;
                index = j;
                number_of_times++;
            } else {
                continue;
            }
        }
    }

    for(int i = 0; i < arry_len; i++)
        printf("%d ", arry[i]);
    printf("\n");
    printf("%s: number of times = %d\n\n",__func__, number_of_times);

    return ;
}

int main(void)
{
    insert_sort();
    return 0;
}

结果

./a.out
13 12 5 3 14 90 0 11 23 9 15 99 100 96 3
0 3 3 5 9 11 12 13 14 15 23 90 96 99 100
insert_sort: number of times = 39

你可能感兴趣的:(数据结构和算法)