zoukankan      html  css  js  c++  java
  • 简单插入排序

    输入: 待排序的整型数组, 输出: 排序完毕的整型数组.
    排序方法: 按照从小到大排序.
    数组下标0, 不存放元素, 用作哨兵或其它用途.

    实现思路:
    把整个数组元素分成2部分, 已排序好的元素和未排序好的元素, 每次把未排序中
    的元素, 拿出一个放在已排序好的元素中恰当的位置, 循环到最后, 即完成排序.

    初始状态, 数组下标1, 也就是第1个元素, 就是已排好序的元素, [2, maxsize],
    这部分数组元素就是未排好序的元素. 第1层循环, i在[2, maxsize-1], 第2层循环,
    就是遍历已排序好的元素,j的范围是[i-1, 1]之间(递减), 之后两两比较并交换即可完成排序.

    完整实现代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void getRandomArr (int arr[], int n);
    void printArr (int arr[], int n);
    void swap (int arr[], int i, int j);
    void insertSort (int arr[], int n);
    
    int main () {
        int max = 6; // 数组长度
        int sortArr[max]; // 待排序数组
        getRandomArr(sortArr, max); // 为待排序数组, 赋值
        printf("待排序的元素如下: 
    ");
        printArr(sortArr, max);
    
        printf("排序完毕的元素如下(从小到大): 
    ");
        insertSort(sortArr, max);
        printArr(sortArr, max);
        return 0;
    }
    
    // 函数功能: 对主程序中的数组进行, 随机数赋值
    // 参数: arr[] 主程序数组名称, n 数组大小
    void getRandomArr (int arr[], int n) {
        int i;
        arr[0] = 0; // 默认0号下标, 值为0
        srand(time(0)); // 随机数种子
        for (i=1; i<n; i++) {
            arr[i] = rand() % 150 + 1; // 范围[1, 150]
        }
    }
    
    // 函数功能: 打印数组
    // 参数: arr[] 需要打印的数组, n 数组大小
    void printArr (int arr[], int n) {
        int i;
        for (i=0; i<n; i++) {
            printf("arr[%d]: %d
    ", i, arr[i]);
        }
        printf("
    ");
    }
    
    // 函数功能: 交换数组i和j下标的2个元素
    void swap (int arr[], int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    
    // 函数功能: 完成对arr[]的排序
    // 参数: arr[] 待排序的数组, n该数组的长度
    void insertSort (int arr[], int n) {
        int i;
        int j;
        for (i=2; i<n; i++) {
            // 如果刚开始i > i-1, 则该元素就是本次最大值, 不用移动
            if (arr[i] > arr[i-1]) {
                continue;
            }
    
            for (j=i-1; j>=1; j--) { // 遍历已经排好序的元素
                // 进行两两比较, 并交换
                if (arr[j+1] < arr[j]) {
                    swap(arr, j, j+1);
                }
            }
            // printArr(arr, n);
        }
    }
    
    
  • 相关阅读:
    vue源码中的检测方法
    Node.js中Streams
    5_PHP数组_3_数组处理函数及其应用_6_数组检索函数
    5_PHP数组_3_数组处理函数及其应用_8_数组与数据结构
    5_PHP数组_3_数组处理函数及其应用_7_数组排列函数
    5_PHP数组_3_数组处理函数及其应用_1_快速创建数组的函数
    5_PHP数组_3_数组处理函数及其应用_2_数组统计函数
    5_PHP数组_3_数组处理函数及其应用_3_数组指针函数
    5_PHP数组_3_数组处理函数及其应用_4_数组和变量间的转换函数
    4_PHP流程控制语句_3_程序跳转和终止语句
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7625955.html
Copyright © 2011-2022 走看看