zoukankan      html  css  js  c++  java
  • 冒泡排序

    任务描述

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

    相关知识

    为了完成本关任务,你需要掌握:1.冒泡排序算法。

    冒泡排序算法

    冒泡排序重复地遍历待排序的数列,每次比较两个相邻元素,如果它们的顺序错误就把它们交换。重复地进行遍历直到没有再需要交换时表示数列已经排序完成。

    • 算法步骤:

      1. 比较相邻的元素:若第一个比第二个大,则交换;

      2. 遍历开始第一对到结尾最后一对,执行步骤1

      3. 重复步骤1~2,直到排序完成。

    • 可改进的冒泡排序:第一趟排序之后最后一个元素是最大的,因此下一趟遍历只需执行到倒数第二对。

    编程要求

    本关的编程任务是补全sort.h文件中的bubbleSort函数,实现冒泡排序,并按要求输出排序序列,函数说明如下: // 冒泡排序算法:将arr数组前面n个元素进行升序冒泡排序,一趟冒泡执行从左往右的相邻比较 // 调用print_array(int arr[] int n)输出前三次冒泡操作后的序列,以及最终的升序序列 void bubbleSort(int arr[], int n);

    评测说明

    本关中包含两个文件分别是: step1/sort.h :此文件为学员文件,其中bubbleSort函数,待补充完整 step1/main.cpp:此文件为评测文件(含main函数),引用“sort.h”。 (上述三个文件可通过点击在代码取的右上角文件夹中的step1文件夹中查看)

    输入输出说明

    输入n(1<=n<=100),输入n个整数,对着n个整数采用冒泡排序方法进行升序排序,每趟冒泡排序过程采用从左至右的相邻两元素的比较,输出前三次冒泡操作后的序列,以及最终的升序序列,例如以下所示:

    测试输入: 10 7 1 4 6 8 9 5 2 3 10 预期输出: 1 4 6 7 8 5 2 3 9 10 1 4 6 7 5 2 3 8 9 10 1 4 6 5 2 3 7 8 9 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 38 5 44 15 36 26 27 2 46 4 19 47 48 50 3 5 38 15 36 26 27 2 44 4 19 46 47 48 50 3 5 15 36 26 27 2 38 4 19 44 46 47 48 50 2 3 4 5 15 19 26 27 36 38 44 46 47 48 50

     

     main.cpp

    #include "sort.h"
    int main() 
    {
        int n;
        cin >> n;    
        int *arr;
        arr = new int[n]; 
        for (int i=0; i<n; i++)
        {
           cin>>arr[i];
        }    
        bubleSort(arr, n);// 执行冒泡排序,并输出前3趟和最后一趟排序结果
        return 0;
    }

    sort.h

    #include <iostream>
    using namespace std;
    
    // 打印arr数组的arr[0~n-1]元素,元素之间使用一个空格相隔
    void print_array(int arr[], int n);
    
    //  冒泡排序算法:将arr数组前面n个元素进行升序冒泡排序,一趟冒泡执行从左往右的相邻比较
    //  调用print_array(int arr[] int n)输出前三次冒泡操作后的序列,以及最终的升序序列
    void bubleSort(int arr[], int n);
    
    void print_array(int arr[], int n)
    
    {
        for (int i = 0; i < n; i++)
        {
            cout << arr[i] << " ";
        }
        cout << endl;
    }
    int n;
    void bubleSort(int arr[], int n)
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        int len = n;
        int cnt = 0;
        for (int i = 0; i < len - 1; i++) {
            for (int j = 0; j < len - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int tmp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = tmp;
                    
                }
            }
            if(i<3)print_array(arr, n);
        }
        print_array(arr, n);
        /********** End **********/
    }
  • 相关阅读:
    码农提高工作效率-黄博文
    myeclipse与tomcat,运行jsp程序
    Ultraedit和写字板修改Tomcat 6.0的server.xml不生效
    MySQL5.5.33对应的JDBC驱动包怎样使用?
    Java是用JDBC连接MySQL数据库
    myeclipse trial expired暂时解决办法
    Json数据使用及学习方法
    在C#中使用json字符串
    vs2012换肤功能,vs2012主题及自定义主题
    给Notepad++换主题
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14004568.html
Copyright © 2011-2022 走看看