• 插入排序


    代码: 

    /**************************************************
     * 插入排序
     *
     * 参考:算法导论 第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 
  • 相关阅读:
    Linux常用解压文件
    微信开放平台 获取 component_verify_ticket
    mysql root密码重置
    编译安装LNMP
    JS生成二维码
    CURL采集
    JS拖动浮动DIV
    JS拖动DIV布局
    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
    zepto.js 源码注释备份
  • 原文地址:https://www.cnblogs.com/xwoder/p/4491520.html
Copyright © 2020-2023  润新知