折半插入排序c语言 csdn,排序算法实大.doc

排序算法实现大全

后面的例程,都是对数组的排序,使用静态链表的也适用于链表的排序。为简单起见,只对单关键码排序,并且最后的结果都是从头到尾按升序排列。下面是统一的测试程序:#include #include using namespace std;#include #include #include #include "InsertSort.h"#define random(num) (rand() % (num))#define randomize() srand((unsigned)time(NULL))#define N 10000 //排序元素的数目#define SORT InsertSort //排序方法class timer//单位ms{public:void start() { start_t = clock(); }clock_t time() { return (clock() - start_t); }private:clock_t start_t;};int KCN, RMN; timer TIMER;void test(int a[]){TIMER.start();SORT(a, N, KCN, RMN);cout << "\tTimeSpared: " << TIMER.time() << "ms" << endl;cout << "KCN=" << left << setw(11) << KCN; cout << "KCN/N=" << left << setw(11)<< (double)KCN/N;cout << "KCN/N^2=" << left << setw(11)<< (double)KCN/N/N;cout << "KCN/NlogN=" << left << setw(11)<< (double)KCN/N/log((double)N)*log(2.0) << endl;cout << "RMN=" << left << setw(11) << RMN;cout << "RMN/N=" << left << setw(11)<< (double)RMN/N;cout << "RMN/N^2=" << left << setw(11)<< (double)RMN/N/N;cout << "RMN/NlogN=" << left << setw(11)<< (double)RMN/N/log((double)N)*log(2.0) << endl;}int main(){int i;//randomize();为了在相同情况下比较各个排序算法,不加这句int* ascending = new int[N];//升序序列int* descending = new int[N];//降序序列int* randomness = new int[N];//随机序列for (i = 0; i < N; i++) { ascending[i] = i; randomness[i] = i; descending[i] = N - i - 1;}for (i = 0; i < N; i++) swap(randomness[i], randomness[random(N)]);cout << "Sort ascending N=" << N; test(ascending);cout << "Sort randomness N=" << N; test(randomness);cout << "Sort descending N=" << N; test(descending);return 0;}

需要说明一点,KCN(关键码比较次数)、RMN(记录移动次数)并不是算法必须的,是为了对算法的性能有个直观的评价(不用那些公式算来算去)。对10000个整数排序应该是最省事的测试手段,建议不要再增多记录数目了,一是在最坏的情况不用等太久的时间,二是避免KCN、RMN溢出,另外有些递归的算法在情况比较糟的时候,记录数目太多堆栈可能会溢出,导致程序崩溃。插入排序

基本思想是,每步将一个待排序的记录,按其关键码大小,插入到前面已经排好序的记录的适当位置,从头做到尾就可以了。

直接插入排序

template void InsertSort(T a[], int N, int& KCN, int& RMN){KCN = 0; RMN = 0;for (int i = 1;

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

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

相关文章

嵌入式开发-lesson9-顺序结构程序设计

Lesson9-顺序程序设计 一、常量与变量 1、常量 在程序运行过程中&#xff0c;其值不能改变的量&#xff0c;叫做常量。 f(x) 2x 1 常用的常量有以下几种类型&#xff1a; 1&#xff09;整型常量&#xff0c; 100&#xff0c; 0&#xff0c; -234 2&#xff09;实型常量…

odoo10学习笔记十四:mixin其他功能模块

原文地址&#xff1a;http://www.cnblogs.com/ygj0930/p/7153680.html odoo提供了许多有用的功能&#xff0c;比如&#xff1a;讨论、通知、网站等。我们可以在开发自己的模块时&#xff0c;引入这些功能。 一&#xff1a;消息系统 在模型中整合消息系统是很简单的&#xff0c;…

Git 历险记

Git历险记&#xff08;一&#xff09; 作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识&#xff0c;它相对于我们熟悉的CVS、SVN甚至同时分布式控制系统的Mercurial&#xff0c;有哪些优势和不足呢。这次InfoQ中文站有幸邀请到《Git Community Book》的译者刘…

怎样用c语言定义高幂整数,位操作运算的奇技淫巧!(附源码)

位运算百度百科如下:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作位操作的优势位运算是一种底层的运算&#xff0c;往往比我们普通的运算要快上许多许多位运算是最高效而且占用内存最少的算法操作&#xff0c;执行效…

mysql--------命令来操作表

常用的通过mysql命令来更改表结构的一些sql语句&#xff0c;包括添加、删除、修改字段、调整字段顺序。 添加字段&#xff1a; alter table user_movement_log Add column GatewayId int not null default 0 AFTER Regionid; (在哪个字段后面添加) 删除字段&#xff1a; alter …

UIImageView01

//// ViewController.m// UIImageView01//// Created by cqy on 16/2/13.// Copyright © 2016年 程清杨. All rights reserved.//#import "ViewController.h"interface ViewController (){UIImageView *img;}endimplementation ViewController- (void)viewD…

android系统耗电量大待机,安卓手机耗电快有什么解决办法吗 安卓手机待机耗电量大怎么办...

虽然手机发展速度越来越快&#xff0c;技术也越来越高了&#xff0c;电池容量相对之前的900毫安1000毫安&#xff0c;都上升到了2000毫安到5000毫安&#xff0c;但是感觉待机的时间和正常的使用时间&#xff0c;却没有之前那么长了&#xff0c;难道手机电池容量是假的&#xff…

js 中null,undefined区别

首先摘自阮一峰先生的文章&#xff1a; 大多数计算机语言&#xff0c;有且仅有一个表示"无"的值&#xff0c;比如&#xff0c;C语言的NULL&#xff0c;Java语言的null&#xff0c;Python语言的None&#xff0c;Ruby语言的nil。 有点奇怪的是&#xff0c;JavaScript语…

集合中的遍历以及删除元素

package collection;import java.util.ArrayList; import java.util.Collection; import java.util.Iterator;/*** 遍历集合元素* Collection提供了统一的变量集合元素的方式&#xff1b;迭代器* 方法为&#xff1a;* Iterator iterator&#xff08;&#xff09;* 该方法可以获…

Linux 关机命令详解 转自脚本之家

在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init&#xff0c;它们都可以达到重启系统的目的&#xff0c;但每个命令的内部工作过程是不同的。 Linux centos重启命令&#xff1a; 1、reboot 2、shutdown -r now 立刻重启(root用户使用) 3、shutdown -r 10 过…

六款值得推荐的Android开源框架简介

六款值得推荐的Android开源框架简介 技术不再多&#xff0c;知道一些常用的、不错的就够了。下面就是最近整理的“性价比”比较高的Android开源框架&#xff0c;应该是相对实用的。 1、volley 项目地址 https://github.com/smanikandan14/Volley-demo JSON&#xff0c;图像等的…

android应用程序的组件,Android基础之应用程序组件

Android应用程序由若干个不同类型的组件组合而成&#xff0c;每一个组件具有其特定的安全保护设计方式&#xff0c;它们的安全直接影响到应用程序的安全。Android应用程序组件的主要类型有&#xff1a;活动(Activity),服务(Service)&#xff0c;广播接收者(Broadcast Receiver)…

数据库杂谈(一)——数据库基本概念

文章目录1 数据库基本概念1.1数据库和数据库管理系统1.2 数据库系统和文件系统1.3 数据模型1.4 数据库三级模式和两级独立性1.4.1 三级模式1.4.2 二级映像功能1.4.3 数据独立性1.5 数据库发展历史及分类1.6 数据库系统的组成和生命周期1.6.1 三个概念1.6.2 生命周期1.6.3 存储管…

【转】Java删除文件夹和文件

原文网址&#xff1a;http://kxjhlele.iteye.com/blog/323657 以前在javaeye看到过关于Java操作文件的一篇文章&#xff0c;写的很好&#xff0c;但找了半天也没找到&#xff0c;就把找到底几篇文章整理一下&#xff0c;做个总结&#xff0c;算是一个学习备份…… 1&#xff0c…

webapi返回字符串,解决自动加双引号或下划线的问题

返回类型改为HttpResponseMessage类型 [HttpGet] public HttpResponseMessage Test() {HttpResponseMessage responseMessage new HttpResponseMessage { Content new StringContent("你要返回的字符串", Encoding.GetEncoding("UTF-8"), "text/pla…

数据库杂谈(二)——数据模型

2 数据模型 摘要&#xff1a;数据模型&#xff08;Data Model&#xff09;是数据特征的抽象&#xff0c;它从抽象层次上描述了系统的静态特征、动态行为和约束条件&#xff0c;为数据库系统的信息表示与操作提供一个抽象的框架。数据模型所描述的内容有三部分&#xff0c;分别是…

android编译系统apk文件,VS2012中MonoForAndroid打包编译APK文件详细图文教程

本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件&#xff0c;从如何创建Android项目&#xff0c;到如何启动调试&#xff0c;都会逐个配图讲解。1 新建项目2 选择安卓3 选择安卓程序4 随便取名和设置存放路径5 确定1 创建完一个新的项目2 点击“…

判断程序是否已经运行

近段时间&#xff0c;需要写一个小功能&#xff0c;就是需要判断程序是否已经运行。某个程序安装后&#xff0c;也许被多个用户运行。那怎样判断当前用户已经运行了此程序了呢&#xff1f;下面是Insus.NET的做法&#xff0c;就是&#xff1a;《VB.NET WinForm获取运行程序用户名…

hyper虚拟机下对centos进行动态扩容

在关机状态下&#xff0c;可增加centos的磁盘空间&#xff0c;但是增加的这部分空间&#xff0c;还需在centos完成以下操作&#xff0c;才能使用1.查看现有的硬盘分区&#xff08;现在空间没有变大&#xff09;#df -h2.对新增的硬盘空间做新增分区&#xff08;硬盘数没有增加&a…

浅谈缓存技术在ASP.NET中的运用

本篇文章虽不谈架构&#xff0c;但是Cache又是架构中不可或缺的部分&#xff0c;因此&#xff0c;在讲解Cache的同时&#xff0c;将会提及到部分架构知识&#xff0c;关于架构部分&#xff0c;读者可以不用理解&#xff0c;或者直接跳过&#xff0c; 你只需关心Cache即可&#…