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; 如果使用的 ...
随机推荐
- 【Opencv 小工具】鼠标选区信息获取
有时候在目标跟踪的算法初始化工作时候,需要选区一个Rect区域,来表示要跟着的目标,所以有次小工具. 使用QT和opencv 编写 项目地址 https://github.com/wzyuliyang ...
- SQL合并时间段的问题
假设表结构如下所示: Tsheets 字段名 字段类型 约束 id CHAR(10) PRIMARY KEY start_date DATE CHECK(start_date<= end_dat ...
- 你今天Python了吗?(下)
在体验了wxPython的强大之后,让我们把注意力集中到Twisted上来.在C++的世界里,你会发现一个很棒的网络应用框架,那就是ACE了:在Python的地盘,Twisted则是在网络应用框架中当 ...
- mybatis系列-06-输入映射
通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型 6.1 传递pojo的包装对象 6.1.1 需求 完成用户信息的综合查询,需要 ...
- 第二百六十一、二天 how can I坚持
昨天在家宅了一天,晚上去看了个电影<寻龙诀>,感觉一般,虽然有黄渤.舒淇.十分打7分吧,画面倒是很震撼. 今天,去了趟东升八家郊野公园,想买个篮球玩玩来,可是超市里的太坑了,都是赠品还拿出 ...
- JavaFX 2 Dialogs
http://edu.makery.ch/blog/2012/10/30/javafx-2-dialogs/ ———————————————————————————————————————————— ...
- ACM OJ Collection
浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 同济大学(TJU):http://acm.t ...
- HDU 4884 TIANKENG’s rice shop (模拟)
TIANKENG's rice shop 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/J Description TIANKE ...
- ASP获取json天气信息
ASP代码(ASP获取页面源码方法,有编码.超时时间参数,处理了乱码.超时的问题): Function GetHttpPage(HttpUrl) Then GetHttpPage="$Fal ...
- c# 使用ChartDirector绘图的一些个人体会
c# 使用ChartDirector绘图的一些个人体会 引言: 最近给客户做一个B/S架构的证券交易大屏幕软件,其中用到对证券指数的走势以及成交量的图形绘制,由于客户要求图形的清晰而且要做 ...