C++_归并排序(纯C版)
#include <iostream>
#include <stdlib.h> using namespace std;
int compared(const void *key1,const void *key2)
{
//cout<<"enter compare"<<endl;
const int* iKey1 = (int*)key1;
const int* iKey2 = (int*)key2;
//cout<<*iKey1<<endl;
//cout<<*iKey2<<endl; if(*iKey1>*iKey2){
//cout<<"big"<<endl;
return 1;
}
else if(*iKey1==*iKey2){
//cout<<"equal"<<endl;
return 0;
}
else if(*iKey1<*iKey2)
{
//cout<<"less"<<endl;
return -1;
}
} //k设置为size-1
//i设置为0
//j设置为中间数
static int merge(void* data, int esize, int i, int j, int k, int (*compare)
(const void* key1,const void* key2))
{
char *a = (char*)data, *m=NULL;
int ipos, jpos, mpos; ipos = i;
jpos = j+1;
mpos = 0; if((m=(char*)malloc(esize*((k-i)+1)))==NULL )
{
return -1;
} while(ipos<=j||jpos<=k)
{
if(ipos>j)
{
//the left elements has no more elements to merge
while(jpos<=k)
{
memcpy(&m[mpos*esize],&a[jpos*esize],esize);
jpos++;
mpos++;
}
continue;
}
else if(jpos>k)
{
//right division has no more elements to merge.
while(ipos<=j)
{
memcpy(&m[mpos*esize],&a[ipos*esize],esize);
ipos++;
mpos++;
}
continue;
}
if(compare(&a[ipos*esize],&a[jpos*esize])<0)
{
memcpy(&m[mpos*esize],&a[ipos*esize],esize);
ipos++;
mpos++;
}
else
{
memcpy(&m[mpos*esize],&a[jpos*esize],esize);
jpos++;
mpos++;
}
}
//prepare to merge data
memcpy(&a[i*esize], m,esize*((k-1)+1)); free(m); return 0; } int mgsort(void *data, int size, int esize, int i,int k,int (*compare)
(const void* key1,const void* key2))
{
int j;
//stop the recursion when no more element divisions can be made.
if(i<k)
{
//determine where to divide the elements
j = (int)(((i+k-1))/2); if(mgsort(data,size,esize,i,j,compared)<0)
{
return -1;
}
if(mgsort(data,size,esize,j+1,k,compared)<0)
{
return -1;
}
//merge the two sorted divisions into a single sorted set
if(merge(data,esize,i,j,k,compared)<0)
{
return -1;
}
}
return 0;
} int main(int argc, char *argv[])
{
int a[]={4,2,5,8,4,6}; for(int i=0;i<6;i++)
{
cout<<a[i]<<",";
}
cout<<endl; mgsort(a,6,4,0,5,compared); for(int i=0;i<6;i++)
{
cout<<a[i]<<",";
}
cout<<endl;
system("PAUSE");
return 0;
}
C++_归并排序(纯C版)的更多相关文章
- javascript日历控件——纯javascript版
平时只有下班时间能code,闲来写了个纯javascript版.引用该calendar.js文件,然后给要设置成日历控件的input的id设置成calendar,该input就会变成日历控件. < ...
- python练习_购物车(简版)
python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下 ...
- Android x86 下运行纯ARM版APP
Android x86 默认不带houdini,运行纯ARM版会提示: 很抱歉,”xxxx”已停止运行 设置->应用兼容性->打开 终端模拟器 $ su# enable_nativebri ...
- Java八股文纯享版——篇①:Java基础
注: 1.笔记为个人归纳整理,尽力保证准确性,如有错误,恳请指正 2.写文不易,转载请注明出处 3.本文首发地址 https://blog.leapmie.com/archives/b8fe0da9/ ...
- Java八股文纯享版——篇②:并发编程
注: 1.笔记为个人归纳整理,尽力保证准确性,如有错误,恳请指正 2.写文不易,转载请注明出处 3.本文首发地址 https://blog.leapmie.com/archives/c02a6ed1/ ...
- C++_直接插入排序(纯C版)
//用于比较大小 int compared(const void *key1,const void *key2) { cout<<"enter compare"< ...
- 21. Bypass D盾_防火墙(旧版 and 新版)SQL注入防御(多姿势)
D盾旧版: 00前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防 ...
- 画线动画——SVG版和纯CSS版
概述 我们常常在网站中看到一些画线的动画效果,非常炫酷,大多数这种画线动画效果是通过SVG实现的,也有不少是用纯css实现的,下面我总结了一下这2种方法,供以后开发时参考,相信对其他人也有用. 参考资 ...
- 数据库_存储过程简介(oracle版)
应朋友要求,写个存储过程说明,本篇比较简单,适合新接触存储过程的同学 先来个简单的 begin dbms_output.put_line('my first execute'); end; 如果使用的 ...
随机推荐
- ORA-15063: ASM discovered an insufficient number of disks for diskgroup "ASM,KEL"
在启动ASM的时候报错,报错如下: SQL> startup ASM instance started Total System Global Area 130023424 bytes Fixe ...
- 【暑假】[实用数据结构]UVa11995 I Can Guess the Data Structure!
UVa11995 I Can Guess the Data Structure! 思路:边读边模拟,注意empty的判断! 代码如下: #include<iostream> #inclu ...
- lucene学习笔记:三,Lucene的索引文件格式
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Oracle 10G (Linux) 冷备恢复
完整的数据库文件集包括:数据库启动参数文件,控制文件,数据文件,日志文件. 可以通过下面的方式来得到文件的位置和名称. 参数文件 $ORACLE_HOME/dbs/spfile[$ORACLE_SID ...
- 黄金点游戏之客户端(homework-05)
0. 摘要 之前我们玩了2次黄金数游戏,我也幸运的得到了一本<代码大全>,嘿嘿.这次的作业是一个Client/Server程序,自动化完成多轮重复游戏. 我完成了Client部分,使用C# ...
- 软件工程个人作业——Agile Software Development读后感
昨天利用了半天的时间看了下老师给的网页下的8篇文章和一段宣言,将感悟整理为下面的一篇博客. 首先先介绍一下这个网页.记得我们上学期上过一门课叫做面向对象建模方法,在这门课上刘超老师极力推荐的一本教材— ...
- homework-02 最大子区域和
题目描述 题目建立上一个作业的题目基础上,上一次作业是要求在一个一维序列里找一个最大连续子串,这次task最基础的要求是在一个二维表里找一个最大连续子矩形,但是这次作业有若干个升级版,分别要求可以加入 ...
- 【转】从零开始,让你的框架支持CocoaPods
首先概括一个大概的步骤: 代码上传到Github 创建podspec文件 在Github上创建release版本 注册CocoaPods账号 上传代码到CocoaPods 检验是否上传成功 更新框架版 ...
- Android实例-手机震动(XE8+小米2)
相关资料:http://blog.csdn.net/laorenshen/article/details/41148843 结果: 1.打开Vibrate权限为True. 2.规律震动我没感觉出来,有 ...
- ocp 1Z0-047 131-276题解析
131. Which view would you use to display the column names and DEFAULT valuesfor a table?A. DBA_TABLE ...