排序。。。

1. 掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;

2. 深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;

3. 了解各种方法的排序过程及其时间复杂度的分析方法。

编程实现如下功能:

(1)建立顺序表,输入n个学生的姓名和分数,作为待排序序列。

(2)利用直接插入排序对待排序序列进行排序,并输出排序后的结果。

(3)利用冒泡排序对待排序序列进行排序,并输出排序后的结果。

(4)利用直接选择排序对待排序序列进行选择排序,并输出排序后的结果。

(5)利用快速排序对待排序序列进行排序,并输出排序后的结果。

.给出n个学生的考试成绩表,每条信息由姓名和分数组成。分别应用直接插入排序、冒泡排序、直接选择排序和快速排序将学生按分数从高到低排列。

#include <iostream>

#include<stdlib.h>

#define Max_size 100

using namespace std;

typedef struct note

{

    string name;

    int score;

}redtype;;

typedef struct Vector

{

    redtype *student;

    int length;

}sqlist;

void  bubbleSor(redtype temp[],int n)//冒泡排序

{//主要思想是通过两两比较来进行排序的

    for(int i=0;i<n-1;i++)

    {

        for(int j=0;j<n-1-i;j++)

        {

            redtype arr;

            if(temp[j].score<temp[j+1].score)

            {

                arr=temp[j];

                temp[j]=temp[j+1];

                temp[j+1]=arr;

            }

        }

    }

    for(int i=0;i<n;i++)

    {

        cout<<temp[i].name<<"    ";

        cout<<temp[i].score<<endl;

    }

    return ;

}

void selectionSor(redtype temp[],int n)

{//选择排序,通过选择一个最大或最小来进行排序

    for(int i=0;i<n-1;i++)

    { int k=i;

        for(int j=i+1;j<n;j++)

        {

            if(temp[i].score<temp[j].score)

            {

                k=j;

            }

        }

        if(k!=i)

        {

            redtype arr;

            arr=temp[i];

            temp[i]=temp[k];

            temp[k]=arr;

        }

    }

    for(int i=0;i<n;i++)

    {

        cout<<temp[i].name<<"    ";

        cout<<temp[i].score<<endl;

    }

    return ;

}

void  insertionSort(redtype temp[],int n)

{//插入排序,通过找到一个值,不断往前面比较找到符合的进行插入

    redtype sour;

    for(int i=1;i<n;i++)

    {

        if(temp[i].score>temp[i-1].score)

        {

          sour=temp[i];

          temp[i]=temp[i-1];

          int j;

          for( j=i-2;j>=0&&sour.score>temp[j].score;j--)

                temp[j+1]=temp[j];

            temp[j+1]=sour;

        }

    }

    for(int i=0;i<n;i++)

    {

        cout<<temp[i].name<<"    ";

        cout<<temp[i].score<<endl;

    }

    return ;

}

void reset(redtype temp[],sqlist s)

{

    for(int i=0;i<s.length;i++)

    {

        temp[i].name=s.student[i].name;

        temp[i].score=s.student[i].score;

    }

}

int Part(redtype arr[], int low, int high) {

    int pivot = arr[high].score; // 选取最后一个元素作为基准点

    int i = (low - 1); // 记录小于基准点的元素位置

    for (int j = low; j <= high - 1; j++) {

            for (int j = low; j <= high - 1; j++) {

        if (arr[j].score > pivot) {

            i++;

            redtype temp=arr[i];

            arr[i]=arr[j];

            arr[j]=temp;

        }

    }

            redtype temp=arr[i + 1];

            arr[i + 1]=arr[high];

            arr[high]=temp;

    return (i + 1);

}

}

void quick(redtype arr[], int low, int high) {

    if (low < high) {

        int pi =  Part(arr, low, high); // 获取分区点

        quick(arr, low, pi - 1); // 对分区点左边的子数组进行快速排序

        quick(arr, pi + 1, high); // 对分区点右边的子数组进行快速排序

    }

}

int main()

{    sqlist s;

    int n;

    cin>>n;

    s.student=new redtype[n];

    s.length=n;

    redtype temp[Max_size];

    for(int i=0;i<n;i++)

    {

        cout<<"输入学生的名字:";

        cin>>s.student[i].name;

        cout<<"输入成绩:";

        cin>>s.student[i].score;

    }

    reset(temp,s);

    cout<<"冒泡排序:"<<endl;

     bubbleSor(temp,n);

    reset(temp,s);

    cout<<"选择排序:"<<endl;

    selectionSor(temp,n);

    reset(temp,s);

    cout<<"插入排序:"<<endl;

      insertionSort(temp,n);

    reset(temp,s);

    cout<<"快速排序:"<<endl;

    quick(temp,0,n-1);

     for(int i=0;i<n;i++)

    {

        cout<<temp[i].name<<"    ";

        cout<<temp[i].score<<endl;

    }

    return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Makefile中error函数的用法

在 Makefile 中&#xff0c;error 函数是一个特殊的函数&#xff0c;用于在执行过程中生成一个错误消息并终止 Makefile 的执行。它的基本语法如下&#xff1a; $(error error-message)其中&#xff0c;error-message 是一个字符串&#xff0c;表示要显示的错误消息。当 Makef…

vue+three.js渲染3D模型

安装three.js: npm install three 页面部分代码&#xff1a; <div style"width: 100%; height: 300px; position: relative;"><div style"height: 200px; background-color: white; width: 100%; position: absolute; top: 0;"><div id&…

【绕过无限Debugger】

文章目录 引言无限Debugger的工作原理绕过无限Debugger的常用技巧条件断点法置空法代码修改与加密 引言 在Web开发中&#xff0c;debugger语句是一种强大的JavaScript功能&#xff0c;允许开发者在代码中设置断点&#xff0c;便于调试和理解代码执行流程。然而&#xff0c;这一…

【文末附gpt升级秘笈】程序的“通用性”与“过度设计”的困境

程序的“通用性”与“过度设计”的困境 四、解决方案的深入阐述 &#xff08;一&#xff09;明确需求和目标&#xff1a;需求驱动设计 在软件开发的初期&#xff0c;我们需要与业务团队紧密合作&#xff0c;深入了解项目的实际需求和目标。这不仅包括明确的功能需求&#xf…

filelist中+incdir+的用法

在大多数 Verilog 编译器&#xff08;如 VCS、ModelSim/Questa、Verilator&#xff09;中&#xff0c;使用 incdir 选项指定包含路径后&#xff0c;仍然需要在 filelist 文件中列出每一个 Verilog 源文件。incdir 选项仅告诉编译器在特定目录中查找头文件&#xff08;例如 .vh …

go语言day4 引入第三方依赖 整型和字符串转换 进制间转换 指针类型 浮点数类型 字符串类型

Golang依赖下载安装失败解决方法_安装go依赖超时怎么解决-CSDN博客 go安装依赖包&#xff08;go get, go module&#xff09;_go 安装依赖-CSDN博客 目录 go语言项目中如何使用第三方依赖&#xff1a;&#xff08;前两步可以忽略&#xff09; 一、安装git&#xff0c;安装程序…

linux学习week1

linux学习 一.介绍 1.概述 linux的读法不下10种 linux是一个开源的操作系统&#xff0c;操作系统包括mac、windows、安卓等 linux的开发版&#xff1a;Ubuntu&#xff08;乌班图&#xff09;、RedHat&#xff08;红帽&#xff09;、CentOS linux的应用&#xff1a;linux在服…

归并排序与快速排序总结-c++

一&#xff0c;归并排序 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用&#xff0c;归并排序的实现由两种方法…

KVM网络模式设置

一、KVM网络模式介绍 1、NAT ( 默认上网 ) 虚拟机利用host机器的ip进行上网,对外显示一个ip;virbr0是KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能,默认ip为192.168.122.1 2、自带的Bridge 将虚拟机桥接到host机器的网卡上,vm和ho…

mysql如何一句实现二行数据的列对换?

二行数据相同列内容对换 思路&#xff1a;先用多表联查的方式查询出这二行数据&#xff0c;再将查询改成修改语句&#xff0c;需要对换的列相互设置值。 //查询 SELECT * fromser_ele_detail AS rule1JOIN ser_ele_detail AS rule2 ON ( rule1.account_no rule2.account_no …

240622_昇思学习打卡-Day4-ResNet50迁移学习

240622_昇思学习打卡-Day4-ResNet50迁移学习 我们对事物的认知都是一点一点积累出来的&#xff0c;往往借助已经认识过的东西&#xff0c;可以更好地理解和认识新的有关联的东西。比如一个人会骑自行车&#xff0c;我们让他去骑摩托车他也很快就能学会&#xff0c;比如已经学会…

使用容器部署redis_设置配置文件映射到本地_设置存储数据映射到本地_并开发java应用_连接redis---分布式云原生部署架构搭建011

可以看到java应用的部署过程,首先我们要准备一个java应用,并且我们,用docker,安装一个redis 首先我们去start.spring.io 去生成一个简单的web项目,然后用idea打开 选择以后下载 放在这里,然后我们去安装redis 在公共仓库中找到redis . 可以看到它里面介绍说把数据放到了/dat…

理解和实现 LFU 缓存置换算法

引言 在计算机科学中&#xff0c;缓存是一种重要的技术&#xff0c;用于提高数据访问速度和系统性能。然而&#xff0c;由于缓存空间有限&#xff0c;当缓存满了之后&#xff0c;就需要一种智能的策略来决定哪些数据应该保留&#xff0c;哪些应该被淘汰。LFU&#xff08;Least…

FLASH闪存

FLASH闪存 程序现象&#xff1a; 1、读写内部FLASH 这个代码的目的&#xff0c;就是利用内部flash程序存储器的剩余空间&#xff0c;来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据&#xff0c;然后存储到内部FLASH&#xff0c;按下K2把所有参数清0&…

找不到mfc140u.dll怎么修复,mfc140u.dll丢失的多种修复方法

计算机丢失mfc140u.dll文件会导致依赖该文件的软件无法正常运行。mfc140u.dll是Microsoft Visual C 2015的可再发行组件之一&#xff0c;它属于Microsoft Foundation Class (MFC) 库&#xff0c;许多使用MFC开发的程序需要这个DLL文件来正确执行。丢失了mfc140u.dll文件。会导致…

无人机无刷电机理论教学培训课程

本文档为一份关于Brushless电机理论的详细教程&#xff0c;由TYTO Robotics编制&#xff0c;旨在帮助用户理解brushless电机的工作原理、特性以及如何通过实验测定其关键参数Kv和Kt。文档首先介绍了brushless电机的基本组成&#xff0c;包括静止的定子和旋转的转子&#xff0c;…

AR增强现实在桥梁工程专业课堂上的应用

桥梁工程专业课堂上应用增强现实技术具有多方面的优势。首先&#xff0c;增强现实技术能够提供更加直观、生动、真实的桥梁工程学习环境&#xff0c;使学生能够更好地理解和掌握桥梁工程的基本原理和设计方法。其次&#xff0c;增强现实技术能够提供更加丰富的桥梁工程案例和实…

考研数学|线代零基础,听谁的课比较合适?

线性代数是数学的一个重要分支&#xff0c;对于考研的学生来说&#xff0c;掌握好这门课程是非常关键的。由于你之前没有听过线性代数课&#xff0c;选择一个合适的课程和老师就显得尤为重要。 以下是一些建议&#xff0c;希望能帮助你找到合适的课程资源。 首先&#xff0c;…

Hadoop3:MapReduce中的ETL(数据清洗)

一、概念说明 “ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;、加载&#xff08;Load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#…