zoukankan      html  css  js  c++  java
  • 直接插入排序

    任务描述

    本关任务:实现插入排序算法,并将乱序数列变成升序。

    相关知识——直接插入排序

    直接插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

    • 算法步骤:

      1. 从第一个元素开始,该元素认为已经被排序;

      2. 取下一个元素,在已经排序的元素序列中从后向前扫描;

      3. 如果已排序元素大于新元素,将已排序元素移到下一位置;

      4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

      5. 将新元素插入到该位置后;

      6. 重复步骤2~5

    编程要求

    本关的编程任务是补全sort.h文件中的simpleSelectSort函数,实现按升序方式将arr数组前面n个元素按升序进行简单选择排序,且每趟选择排序均从左至右选择首次出现的最小值,输出排序过程中的前三趟和最后一趟的排序结果。具体要求如下: // 直接插入排序算法:将arr数组前面n个元素按升序进行直接插入排序, // 调用print_array(int arr[] int n)输出前三次直接插入排序后的序列,以及最终的升序序列 void insertSort(int arr[], int n); ####评测说明 本关中包含三个文件分别是: step3/sort.h :此文件为学员文件,其中insertSort函数,待补充完整 step3/main.cpp:此文件为评测文件(含main函数),引用“sort.h”。 (上述三个文件可通过点击在代码取的右上角文件夹中的step3文件夹中查看)

    输入输出说明

    输入n(1<=n<=100),输入n个整数,对着n个整数采用直接插入排序方法进行升序排序,输出前三趟以及最终的排序序列,例如以下所示:

    测试输入: 10 7 1 4 6 8 9 5 2 3 10 预期输出: 1 7 4 6 8 9 5 2 3 10 1 4 7 6 8 9 5 2 3 10 1 4 6 7 8 9 5 2 3 10 1 2 3 4 5 6 7 8 9 10

    测试输入: 15 3 44 38 5 47 15 36 26 27 2 46 4 19 50 48 预期输出: 3 44 38 5 47 15 36 26 27 2 46 4 19 50 48 3 38 44 5 47 15 36 26 27 2 46 4 19 50 48 3 5 38 44 47 15 36 26 27 2 46 4 19 50 48 2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

     

    sort_.h

    //
    //  sort_.h
    //  Sort
    //
    //  Created by ljpc on 2018/4/20.
    //  Copyright © 2018年 ljpc. All rights reserved.
    //
    
    #ifndef sort__h
    #define sort__h
    
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    void print_array(int *arr, int n);
    // 打印数组
    
    void sort_array(int *arr, int n);
    // 数组排序
    
    #endif /* sort__h */

    main.cpp

    //
    //  main.cpp
    //  Sort
    //
    //  Created by ljpc on 2018/4/20.
    //  Copyright 漏 2018骞  ljpc. All rights reserved.
    //
    
    #include <iostream>
    #include "sort_.h"
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        // std::cout << "Hello, World!
    ";
    
        int n;
        scanf("%d", &n);
        
        int *arr;
        arr = (int*)malloc(sizeof(int)*n);
        
        for (int i=0; i<n; i++)
        {
            scanf("%d", &arr[i]);
        }
        
        sort_array(arr, n);
        
        return 0;
    }

    sort_.cpp

    #include "sort_.h"
    
    void print_array(int *arr, int n)
    // 打印数组
    {
        if(n==0){
            printf("ERROR: Array length is ZERO
    ");
            return;
        }
        printf("%d", arr[0]);
        for (int i=1; i<n; i++) {
            printf(" %d", arr[i]);
        }
        printf("
    ");
    }
    int n,len,i,j;
    void sort_array(int *arr, int n)
    //  编程实现《插入排序算法》:将乱序序列arr转化为升序序列
    //  函数参数:乱序整数数组(无重复元素) 数组长度
    //  要求输出:调用print_array(int *arr, int n)输出前三次插入操作后的序列,以及最终的升序序列
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        len =n;
        int preIndex, current;
        for (i = 1; i < len; i++) {
            preIndex = i - 1;
            current = arr[i];
            while (preIndex >= 0 && arr[preIndex] > current) {
                arr[preIndex + 1] = arr[preIndex];
                preIndex--;
            }
            arr[preIndex + 1] = current;
            if (i < 4)print_array(arr, n);
        }
        print_array(arr, n);
        
        /********** End **********/
    }
  • 相关阅读:
    07: mysql锁和事物隔离
    06: mysql索引查找原理及调优
    06: 字典、顺序表、列表、hash树 实现原理
    05:树结构
    02:MongoDB操作
    01:MongoDB基础
    02: CMDB设计思路
    二级制包安装Tomcat 与 RPM包安装Tomcat
    Docker的volume机制实现容器数据的持久性存储
    配置docker的私有仓库
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14004672.html
Copyright © 2011-2022 走看看