插入排序

代码: 

/**************************************************
 * 插入排序
 *
 * 参考:算法导论 第3版 第一部分 第2章 2.1
 *
 * 本例中,数组的第0个位置存放的数值无意义,不参与程序运行过程
 **************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// 插入排序
void insertion_sort(int [], size_t);

// 使用随机数填充数组
void fill_array_with_random(int [], size_t);

// 打印数组
void display(int [], size_t);

int main(int argc, const char * argv[]) {
    // 设定数组长度
    size_t length = 10;
    int A[length];
    
    // 使用随机数填充数组
    fill_array_with_random(A, length);
    
    // 打印排序前的数组
    printf("Before sort:
");
    display(A, length);
    
    // 插入排序
    insertion_sort(A, length);
    
    // 打印排序后的数组
    printf("After sort:
");
    display(A, length);
    
    return 0;
}

// 插入排序
void insertion_sort(int A[], size_t length) {
    for (size_t i = 2; i <= length; ++i) {
        int key = A[i];
        size_t j;
        for (j = i - 1; j > 0 && A[j] > key; --j) {
            A[j + 1] =  A[j];
        }
        A[j + 1] = key;
    }
}

// 使用随机数填充数组
void fill_array_with_random(int A[], size_t length) {
    // 指定生成的随机数范围为[lower_limit, upper_limit)
    int lower_limit = 100;
    int upper_limit = 1000;
    
    srand((unsigned int)time(NULL));
    for (size_t i = 1; i <= length; ++i) {
        A[i] = rand() % (upper_limit - lower_limit) + lower_limit;
    }
}

// 打印数组
void display(int A[], size_t length) {
    for (size_t i = 1; i <= length; ++i) {
        printf("%d ", A[i]);
    }
    printf("
");
}

输出:

Before sort:
398 176 747 234 835 263 121 459 155 227 
After sort:
121 155 176 227 234 263 398 459 747 835 
原文地址:https://www.cnblogs.com/xwoder/p/4491520.html