zoukankan      html  css  js  c++  java
  • 选择排序法

    老师布置的程序实验作业:

    下面程序为选择排序,要求按如下步骤完成本题实验,理解和掌握函数参数的传递,理解函数的嵌套调用。

    1) 阅读程序,理解选择排序的思想

    2) 上机编辑,调试程序

    3) 用两组数据,给出程序运行结果,

    4) 用单步执行,观察程序执行的流程

    5) 画出流程图描述程序的实现

         6) 问题:什么是函数的嵌套调用?

     

    原理:
    选择排序,即从乱序输入的一组数组(个数为n)中,找出其中大(最小)元素所在的位置,把该元素的和最右边(最左边)的元素交换位置。接下来,排除已排序元素,在剩下元素中寻找最大(最小元素)。。。重复操作,直到操作了n-1遍后,所有元素都已经排好序,再输出排序后的数组。

    代码:

    #include <iostream>
    using namespace std;
    #define N 10
    int max(int a[], int n);
    void sel_sort(int a[], int n);
    int main()
    {
        loop:             //使用loop控制流程,方便调试
        int a[N];
        for (int i = 0; i < N; i++)   //一次输入数组的值
        {
            cin >> a[i];
        }
        //调用函数sel_sort,函数sel_sort中嵌套调用函数max
        sel_sort(a, N);      //a相当与指针,实际上传递了数组a[10]的首地址也即是a[0]的地址
        for (int i = 0; i < 10; i++)
        {
            cout << a[i] << " ";
        }
        cout << endl;
        goto loop;
        
        system("pause");
    }
    int  max(int a[], int n)
    {
        int i, j = 0;
        for (i = 1; i < n; i++)
        {
            if (a[i] > a[j])
            {
                j = i;
            }
        }
        return j;                      //把j返回给sel_sort函数中max函数的调用点
    }
    void sel_sort(int a[], int n)
    {
        int j;                   //在函数sel_sort中可见
        int i = n;
        for (; i > 1; i--)
        {
            j=max(a, i);               //调用max函数,把数组和变量i传输过去,i用来控制max中选择最大值的范围,每选完一个最大值,缩小一次范围,直到缩小为2
            int temp = a[i-1];          //交换当前未排序的最右边的值与经max函数求出的当前范围中的最大值
            a[i-1] = a[j];           
            a[j] = temp;
    
        }
        //经过9次选择排序后,得出从左往右是从小到大排序的数列
        return;     //函数返回类型为void,此行可省略
    }

     调试结果:

    错漏百出非常拙劣的程序框图:

    函数嵌套调用:

    函数的定义是相互平行的,不可在一个函数定义中定义另一个函数,但函数可以在另一个函数中被调用。函数的嵌套调用就是,在一个函数中,调用其他的函数,通过其他函数的行为或者是调用其他函数的返回值来达到某种目的。

     

  • 相关阅读:
    XAMPP Error: Apache shutdown unexpectedly. 解决思路
    [转]《我眼中的技术高手》——邯郸学步、创作与创新
    svn 提交错误 400 Bad Reqest MKACTIVITY 请求于XX失败 Conflict Unable to connect to a repository at URL
    try catch 怎么写?
    正则词典
    用B表更新A表
    3种PHP连接MYSQL数据库的常用方法
    PHP数据库连接失败--could not find driver 解决办法
    Php.ini 文件位置在哪里,怎么找到 php.ini
    检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。
  • 原文地址:https://www.cnblogs.com/urahyou/p/10010340.html
Copyright © 2011-2022 走看看