数据结构实验八:排序的应用

目录

一、实验目的

二、实验原理

1.直接插入排序

2.快速排序

三、实验内容

实验1

代码

截图 

实验2

代码

截图

 


一、实验目的

1、掌握排序的基本概念;

2.掌握并实现以下排序算法:直接插入排序、快速排序。

二、实验原理

1.直接插入排序

其基本思想是将一个待排序的元素插入到已经排好序的部分。

  1. 从第二个元素开始,将当前元素插入到已经排好序的序列中。
  2. 将当前元素依次与已排序序列中的元素比较,找到合适的位置插入。
  3. 重复以上步骤,直到所有元素都有序。
void insertion_sort(int arr[], int num) {for (int i = 1; i < num; i++) {int start = 0;//已排序好的数组中待排序的元素最后所在的位置int end = i;//加上待排序的元素的数组的最后一个元素的位置int temp = arr[i];for (int j = i - 1; j >= 0; j--) {//从后往前找到已排序的数组中第一个比待排序元素小的位置if (arr[i] > arr[j]) {start = j+1;break;}}for (int i = end; i > start; i--) {//比待排序元素大的都后移arr[i] = arr[i - 1];}arr[start] = temp;}return;
}

2.快速排序

 其基本思想是选择一个基准元素,将数组划分为左右两个子数组,使得左边的元素都小于等于基准,右边的元素都大于等于基准,然后对左右子数组递归地应用快速排序。

  1. 选择基准元素(Pivot): 从数组中选择一个元素作为基准元素。通常选择数组中的最后一个元素。

  2. 划分阶段: 将数组中小于等于基准的元素放在基准的左侧,将大于等于基准的元素放在基准的右侧。这个过程称为划分(Partitioning)。

    • 初始化两个指针,i 指向数组的起始位置,j 指向数组的结束位置。
    • 从左到右找到第一个大于基准的元素,从右到左找到第一个小于基准的元素,交换它们的位置。
    • 重复上述步骤,直到 i 大于等于 j
    • 将基准元素与 i 所指位置的元素交换。
  3. 递归排序: 对划分得到的两个子数组分别递归地应用快速排序。

    • 对左侧子数组递归调用快速排序:quick_sort(arr, low, pi - 1)
    • 对右侧子数组递归调用快速排序:quick_sort(arr, pi + 1, high)
  4. 合并结果: 在递归的最后阶段,数组会变得有序。整个过程重复直到整个数组排序完成。

//交换两个元素
void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}// 根据基准元素将数组划分为两个子数组,并返回基准元素的位置
int partition(int arr[], int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (arr[j] <= pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return i + 1;
}// 快速排序函数
void quick_sort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);// 递归地对左右子数组进行排序quick_sort(arr, low, pi - 1);quick_sort(arr, pi + 1, high);}
}

三、实验内容

实验1

使用直接插入排序算法对序列{49,38,65,97,76,13,27,49}进行从小到大排序,并且输出每一趟排序的结果。

代码

#include<iostream>
using namespace std;void insertion_sort(int arr[], int num) {for (int i = 1; i < num; i++) {int start = 0;//已排序好的数组中待排序的元素最后所在的位置int end = i;//加上待排序的元素的数组的最后一个元素的位置int temp = arr[i];for (int j = i - 1; j >= 0; j--) {//从后往前找到已排序的数组中第一个比待排序元素小的位置if (arr[i] > arr[j]) {start = j+1;break;}}for (int i = end; i > start; i--) {//比待排序元素大的都后移arr[i] = arr[i - 1];}arr[start] = temp;for (int i = 0; i < 8; i++) {cout << arr[i] << " ";}cout << endl;}return;
}
int main() {int arr1[8] = { 49,38,65,97,76,13,27,49 };cout << "直接插入排序结果为" << endl;insertion_sort(arr1, 8);return 0;
}

截图 

实验2

使用快速排序算法对序列{49,38,65,97,49,13,27,76}进行从小到大排序,并且输出每一趟排序的结果。 

代码

#include<iostream>
using namespace std;#include<iostream>
using namespace std;//交换两个元素
void swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}// 根据基准元素将数组划分为两个子数组,并返回基准元素的位置
int partition(int arr[], int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (arr[j] <= pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return i + 1;
}// 快速排序函数
void quick_sort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);for (int i = 0; i < 8; i++) {cout << arr[i] << " ";}cout << endl;// 递归地对左右子数组进行排序quick_sort(arr, low, pi - 1);quick_sort(arr, pi + 1, high);}
}int main() {int arr1[8] = { 49,38,65,97,76,13,27,49 };cout << "快速排序结果为" << endl;quick_sort(arr1,0, 7);return 0;
}

截图

 

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

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

相关文章

如何选择便捷安全的黄金交易平台?

黄金交易平台的介绍 黄金交易平台是一个提供方便、安全的方式进行黄金交易的网上平台。 投资者可以通过这些平台进行黄金的买卖&#xff0c;参与黄金市场的投资活动。 这些平台提供了一个简单易用的界面&#xff0c;让投资者可以方便地进行交易操作。 选择合适的黄金交易平台…

小土堆pytorch学习笔记002

1、TensorBoard的使用 &#xff08;1&#xff09;显示坐标&#xff1a; from torch.utils.tensorboard import SummaryWriter import numpy as np from PIL import Imagewriter SummaryWriter("logs") # 写入的位置 log_dir logs # writer.add_image() "…

【LeetCode: 148. 排序链表 + 链表 + 归并排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

今天来看看工商业储能收益模式有哪些

安科瑞武陈燕acrelcy 2023 年有望成为工商业储能的发展元年&#xff0c;主要原因2023年工商业储能的经济性有望大幅提升。工商业储能下游主要为工商业企业&#xff0c;投资是否具有经济性是工商业需求的核心因素之一&#xff0c;而2023年工商业储能经济性或将显著提升&#xf…

shared_ptr 与 unique_ptr 的转换 笔记

推荐B站文章&#xff1a; 6.shared_ptr与unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p6&vd_sourcea934d7fc6f47698a29dac90a922ba5a3我的往期文章&#xff1a; 独占指针&#xff1a;unique_ptr 与 函数调用-CSDN博客https://blog.csdn.n…

【Docker】构建镜像

一般来说我们不需要自己构建镜像&#xff0c;这些镜像在docker hub上面已经有现成的了&#xff0c;比如常用的数据库、应用软件等。 某些情况我们还是需要自己来构建: 找不到现成的镜像&#xff0c;比如自己开发的应用程序 需要在镜像中加入特定的功能/软件 Docker提供了两种…

C++入门学习(十五)运算符

算术运算符&#xff1a;用于处理四则运算赋值运算符&#xff1a;用于将表达式的值赋给变量比较运算符&#xff1a;用于表达式的比较&#xff0c;并返回一个真值或假值逻辑运算符&#xff1a;用于根据表达式的值返回真值或假值 一、加减乘除 #include <iostream> #incl…

Ubuntu20.04 安装 ROS noetic + MAVROS

本文在 AlphaCatOvO【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程 基础上&#xff0c;根据实际安装经验&#xff0c;稍微进行补充。 一、安装Ubuntu20.04 假设已经正确安装。 二、安装 ROS noetic 2.1 换源 执行 sudo apt update sudo mv /etc/apt/sources.list /etc/apt/…

A股市场风云!深圳开股票账户交易佣金费用最低是多少?

最近A股市场表现出色&#xff0c;呈现出风云状态&#xff01;投资者纷纷涌入股市&#xff0c;推动股指不断攀升。一方面&#xff0c;政府出台了一系列政策来稳定市场&#xff0c;如加强监管力度、推动资本市场改革等&#xff0c;为投资者提供了更多机会和便利条件。另一方面&am…

“情暖寒冬 温暖相伴”关爱慰问

岁末寒冬&#xff0c;春节将至&#xff0c;为持续巩固脱贫攻坚成果&#xff0c;扎实助力乡村振兴&#xff0c;市融媒体中心开展“情暖寒冬 温暖相伴”慰问活动。 1月25市融媒体中心联合我市志愿者协会在南村镇忽树庄村开展“情暖寒冬 温暖相伴”慰问活动&#xff0c;为脱贫户送…

Spark3学习笔记

文章目录 一、Spark 基础1、Spark概述1.1 Spark简介1.2 Spark VS Hadoop1.3 Spark特点1.4 Spark入门Demo 2、Spark 运行模式2.1 概述2.2 Local模式2.3 Standalone 模式2.4 配置高可用&#xff08; Standalone HA&#xff09;2.5 Yarn 模式2.6 K8S & Mesos 模式2.7 Windows …

Vue基础知识

Vue Vue基础知识 v-bind:动态绑定属性值 Vue 修改&#xff0c;标签内也修改 在methods 中可以定义很多函数 在 data 中可以定义很多变量 v-if / v-show&#xff1a;对符合条件的元素进行展示 v-for:把数据遍历出现在网页中 案例 <!DOCTYPE html><html lang"e…

postman自动化测试如何设置环境变量教程

在接口测试中&#xff0c;我们经常会用到一些通用请求参数&#xff0c;或者需要使用某个接口的返回参数作为另一个接口的请求参数&#xff0c;静态的参数还好&#xff0c;如果是经常变动的参数&#xff0c;那么操作起来&#xff0c;就特别的麻烦&#xff0c;这时候&#xff0c;…

如何利用监管工具有效防止员工私单飞单?

在今天的商业社会中&#xff0c;企业必须保持高度的监管和控制力度&#xff0c;以确保员工遵守公司的规章制度和道德准则。尤其在微信成为了日常工作中不可或缺的沟通工具的情况下&#xff0c;如何有效防止员工进行私单飞单成为了每个企业亟需解决的问题。 而微信管理系统通过…

【CCF】JCR3区,SCIEI双检,征稿领域广,来稿不拒!

一、期刊简介 3区计算机类SCI&EI 【期刊概况】IF&#xff1a;2.0-3.0&#xff0c;JCR3区&#xff0c;中科院4区&#xff1b; 【终审周期】走期刊部系统&#xff0c;3个月左右录用&#xff1b; 【检索情况】SCI&EI双检&#xff1b; 【WOS收录年份】2001年&#xff…

应急响应-Windows-进程排查

进程&#xff08;process&#xff09;是计算机中的程序关于某数据集合上的一次运动活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;是操作系统结果的基础。在早期面向进程结构中&#xff0c;进程是线程的容器。无论是在Windows系统还是Linux系统中&#xff0c…

专业远程控制软件有哪些品牌

远程办公、远程控制类的软件很多&#xff0c;主打方向和面向的客户人群也不一样。个人用户可能更在意便捷、免费等因素&#xff1b;专业用户会更注重安全性、管理功能等。今天我们介绍几个在全球知名的专业商业远程软件。 1、TeamViewer 简介&#xff1a;TeamViewer &#xf…

2016年认证杯SPSSPRO杯数学建模B题(第一阶段)低分辨率下看世界全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 低分辨率下看世界 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#xff0c…

持续集成工具Jenkins的使用之安装篇(一)

Jenkins是一个基于Java开发的开源的一种持续集成工具&#xff0c;主要用于环境部署&#xff0c;监控重复性的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。要想使用它&#xff0c;你就必须的先安装&#xff0c;接下来我们就介绍下J…

win10重启以后才能识别有线耳机

最近遇到一件让人很无奈的事情&#xff0c;win10重启以后才能识别有限耳机。奇怪的是无线耳机没有问题。 bing搜索了很多&#xff0c;就是解决不了问题。 偶然之间&#xff0c;文后的参考文献被搜索到&#xff0c;该文献提供的方法比较简单&#xff0c;经过验证&#xff0c;方…