插入排序改进 将交换变成赋值语句 优点适用于近乎有序的序列

效果非常的明显

下面给出代码截图

再给出原代码

#include<iostream>
#include<string>
#include "Student.h"
#include "sorttesthelper.h"
using namespace std;template<typename T >void selectionSort( T arr[], int n){for(int i = 0 ; i < n ; i++){//寻找【i,n之间的最小值】int minIndex = i;for( int j = i + 1 ; j < n ; j++)if(arr[j] < arr[minIndex] )minIndex = j;swap( arr[i] , arr[minIndex]);}
}//对插入排序来说,直接从第二个元素开始template<typename T >
void InsertSort( T arr[], int n){for(int i = 1 ; i < n ; i++){T e = arr[i];// j 需要保存元素e应该插入的位置int j;//寻找【i应该插入的位置】,但是注意我们是从后面往前找所以j 要从后往前// for( int j = i  ; j > 0 ; j --)//     if(arr[j] < arr[j - 1] )//         swap(arr[j], arr[j-1]);//     else //         break;//插入排序的优点是 可以提前 终止循环 所以对于几乎有序的序列 插入排序的性能非常强for( j = i  ; j > 0 && arr[j-1] > arr[e]; j --)arr[j] = arr[j-1];arr[j] = arr[e];}
}int main()
{int a[5] = {5,62,3,58,44};selectionSort( a, 5 );for( int i = 0 ; i < 5 ; i++)cout<<a[i]<< " ";cout<<endl;float b[4] = {4.4,2.3,5.63};selectionSort( b , 3);for( int i = 0 ; i < 3 ; i++)cout<<b[i]<< " ";cout<<endl;string c[2] = {"z","b"};selectionSort( c , 2);for( int i = 0 ; i < 2 ; i++)cout<<c[i]<< " ";cout<<endl;Student d[3] = {{"D",90} , {"C",89} , { "B", 114}};selectionSort( d , 3);for( int i = 0 ; i < 3 ; i++)cout<<d[i];cout<<endl;int n = 100000;int *arr = SortTestHelper :: generateRandomArr(n, 0, n) ;int *arr2 = SortTestHelper :: copyIntArray(arr, n);int *arr3 = SortTestHelper :: generateNearlyorderedArr(n, 100);// InsertSort(arr2, n);// SortTestHelper :: printarr(arr2, n);// selectionSort( arr, n );// SortTestHelper :: printarr(arr, n);// SortTestHelper::test_sort("selection Sort", selectionSort, arr,n);SortTestHelper::test_sort("Insertion Sort", InsertSort, arr2,n);SortTestHelper::test_sort("Insertion Sort a nearly ordered arr", InsertSort, arr3,n);delete[] arr;delete[] arr2;return 0;}

给出辅助文件

#ifndef SORT_HELPER_H
#define SORT_HELPER_H
//解决ide.h文件的多重引用的问题
#include <iostream>
#include <string>
#include <ctime>
#include <cassert>
using namespace std;
namespace SortTestHelper{//生成n个元素的随机数组,每个元素的随机范围为【rangeL, rangeR】int* generateRandomArr(int n, int rangeL, int rangeR){assert( rangeL <= rangeR );int *arr = new int[n];//设置随机种子srand(time(NULL));for(int i = 0; i < n ;i ++)arr[i] = rand()%(rangeR - rangeL + 1) + rangeL;return arr;}int* generateNearlyorderedArr(int n, int swaptimes){int *arr = new int[n];for(int i = 0; i < n ;i ++)arr[i] = i;//设置随机种子srand(time(NULL));for(int i = 0; i < swaptimes ; i ++){int posx = rand()%n;int posy = rand()%n;swap( arr[posx], arr[posy] );}return arr;}template<typename T >void printarr(T arr[], int n){for( int i = 0 ; i < n ; i++)cout<<arr[i]<< " ";cout<<endl;return;}//我们也希望写一个辅助函数来帮我们判断 函数的正确性template<typename T >bool isSorted(T arr[], int n){for (int i = 0; i < n - 1; i++)if (arr[i]> arr[i+1])return false;return true;}template<typename T >// 我们希望之后传入的都是函数名字 指针和测试用例void test_sort( string sortNmae, void(*sort)(T[], int), T arr[], int n){clock_t startTime = clock();sort(arr,n);clock_t endTime = clock();assert( isSorted(arr, n ));//每一秒中时钟周期运行的个数  最后输出的程序 运行的多少秒cout<< sortNmae << " : "<<double(endTime - startTime)/ CLOCKS_PER_SEC << " s " <<endl;return;}int* copyIntArray(int a[], int n){int* arr = new int[n];copy(a, a + n, arr);return arr;}}#endif //SORT_HELPER_H

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

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

相关文章

编程烦恼:为什么我们有时在解决问题时感到“愚蠢”

编程烦恼&#xff1a;为什么我们有时在解决问题时感到“愚蠢” 在编程的旅程中&#xff0c;每个程序员都曾经遇到过一些令人沮丧的时刻。有时&#xff0c;我们在代码中遇到了神秘的bug&#xff0c;我们花了很多时间来排查问题&#xff0c;但却不断失败。然而&#xff0c;令人惊…

Linux磁盘扩容(超详细)

一、第一步VM虚拟机扩容磁盘 首先我们要先关闭虚拟机&#xff0c;然后这个虚拟机不能存在镜像&#xff0c;否则无法进行扩容 提示&#xff1a; 如果想要某个镜像扩容的解决办法&#xff1a; 可以先保存当前镜像&#xff0c;然后在跳转到你想保存的镜像当中&#xff0c;然后对那…

Service Mesh和Kubernetes:加强微服务的通信与安全性

文章目录 什么是Service Mesh&#xff1f;Service Mesh的优势1. 流量控制2. 安全性3. 可观测性 Istio&#xff1a;Service Mesh的领军者流量管理安全性可观测性 Linkerd&#xff1a;轻量级Service Mesh流量管理安全性可观测性 Istio vs. Linkerd实际应用结论 &#x1f388;个人…

基于SpringCloud实现房产销售平台的设计与实现项目【项目源码+论文说明】

摘要 信息技术的发展推动了管理系统的进步&#xff0c;目前各种行业都积极参与管理系统的建设工作。特别是疫情带来的影响&#xff0c;让传统行业逐渐认识到只有通过在线管理才能继续的发展。房产销售平台是为求租者提供房源必备的平台&#xff0c;如何找到一个好的房源是生活…

企业微信设置可信域名

可信域名的验证文件注意一定放在域名所在的根目录下。 以cloud studio为例&#xff0c;工作区新建终端的路径就是域名在的根目录&#xff0c;而不是服务器的根目录

react+ts手写cron表达式转换组件

前言 最近在写的一个分布式调度系统&#xff0c;后端同学需要让我传入cron表达式&#xff0c;给调度接口传参。我去了学习了解了cron表达式的用法&#xff0c;发现有3个通用的表达式刚好符合我们的需求&#xff1a; 需求 每天 xx 的时间&#xff1a; 0 11 20 * * ? 上面是…

Kotlin中的算数运算符

在Kotlin中&#xff0c;我们可以使用各种算术运算符来进行数值计算和操作。下面对这些运算符进行详细描述&#xff0c;并提供示例代码。 正号&#xff08;正数&#xff09;和负号&#xff08;负数&#xff09;&#xff1a; 正号用于表示一个正数&#xff0c;不对数值进行任何…

东方通部署vue项目

在东方通中部署vue项目需要以war 的形式进行部署具体操作步骤如下 1. 正常打包完vue 项目 在其项目目录下创建WEB-INF 文件夹&#xff0c;同时在里面新建一个 rewrite.config 的文件文件具体内容如下&#xff1a; RewriteRule ^/index\.html$ - [L]RewriteCond …

PyQt 问题记录

1.现成的组件不一定线程安全&#xff0c;&#xff08;包括且不限于数据的修改竞争,和一些组件的崩溃 ) 对于PyQt 的线程使用&#xff0c;可能还需要更谨慎些 保存逻辑 QuestionBox("保存/Save")def Save(self):okFlagFalseerrFlagFalseWriteCmd{}for it in self.Mode…

易点易动上线招标管理模块:提升企业高效招标管理的解决方案

在当今竞争激烈的商业环境下&#xff0c;招标管理对于企业的成功至关重要。为了帮助企业实现高效的招标管理&#xff0c;易点易动固定资产管理系统上线了全新的招标管理模块。该模块涵盖了供应商资质审核、采购询价单、重新报价单、招标结果单、招标作废单等功能&#xff0c;为…

vue源码笔记之——响应系统

vue是一种声明式范式编程&#xff0c;使用vue者只需要告诉其想要什么结果&#xff0c;无需关心具体实现&#xff08;vue内部做了&#xff0c;底层是利用命令式范式&#xff09; 1. reactive为什么只能操作对象&#xff0c;对于基本数据类型&#xff0c;需要用ref&#xff1f; …

ATE测试工程师的前景待遇如何?薪资天花板有多高?

在芯片行业&#xff0c;ATE测试工程师扮演着至关重要的角色。 他们不仅需要理解电路和芯片内部的工作原理&#xff0c;还需要利用各种测试工具和方法对芯片进行精确的测试和分析。那么ATE测试工程师前景如何&#xff1f;需要具备哪些技能要求呢&#xff1f; 首先来了解什么是…

计算机基础知识33

进程基础(操作系统中的概念) 进程它是操作系统总最重要的概念&#xff0c;线程也是 进程和线程都是有操作系统来调度使用的&#xff0c;我们程序员是不能控制的 # 进程和程序是两码事、完全不一样 程序&#xff1a;其实一个死的东西、一堆代码就是程序&#xff0c;它也没有生命…

通信管理机在变电站监控系统中的应用-安科瑞黄安南

随着通信管理机在我国历经多年的发展&#xff0c;随着技术的不断创新和完善&#xff0c;越来越多的变电站认可和接受并且正在使用着通信管理机。 1通信管理机的功能特点 通讯管理机一般运用于变电所、调度站&#xff0c;通讯管理机通过控制平台控制下行的RRtu设备&#xff0c…

QT学习笔记-QT程序执行Linux Shell命令实现动态添加路由

QT学习笔记-QT程序执行Linux Shell命令实现动态添加路由 背景关键代码程序界面 背景 在使用QT进行Linux下应用程序开发时&#xff0c;在特定业务需求下&#xff0c;需要在程序中执行Linux的Shell命令。QT中执行Linux命令可以通过QProcess类和system来实现&#xff0c;如果需要…

美芯片禁令再次扩大,波及英伟达、AMD以及intel等科技公司 | 百能云芯

拜登政府17日宣布&#xff0c;计划停止英伟达&#xff08;Nvidia&#xff09;、超微半导体以及英特尔等科技公司设计的先进AI芯片输出中国大陆&#xff0c;英伟达&#xff08;Nvidia&#xff09;昨日股价重挫4.68%至每股439.38美元&#xff1b;天风国际证券分析师郭明錤表示&am…

flask实战(问答平台)

课程链接 问答平台项目结构搭建 先创建一个配置文件config.py&#xff0c;后面有些配置写在这里 #app.py from flask import Flask import configapp Flask(__name__) #绑定配置文件 app.config.from_object(config)app.route(/) def hello_world(): # put applications …

嵌入式行业是否会面临中年危机?

今日话题&#xff1a;嵌入式行业是否会面临中年危机&#xff1f;事实上&#xff0c;无论你在哪个行业工作&#xff0c;都可能面临下岗风险。因此&#xff0c;我的建议是选择一个有前景、发展空间大的行业和方向&#xff0c;并不断提升自己的技能价值。为了帮助你在嵌入式领域取…

实测文心一言4.0,真的比GPT-4毫不逊色吗?

10月17日&#xff0c;李彦宏在百度世界2023上表示。当天&#xff0c;李彦宏以《手把手教你做AI原生应用》为主题发表演讲&#xff0c;发布文心大模型4.0版本。 今天&#xff0c;咱们就开门见山啊。这一回要测一测&#xff0c;昨天才发布的文心一言大模型 4.0。 之所以要测它&…