C++编程问题:不懂如何用rotate实现插入排序求指教。源代码如下

问题描述

C++编程问题:不懂如何用rotate实现插入排序求指教。源代码如下

#ifndef _INSERTIONSORT_H
#define _INSERTIONSORT_H
#include
using namespace std;
template
void insertionSort(const Iterator &a, const Iterator &b){
int i,j,n=distance(a,b);
Iterator p,q,t;
for(j=1,q=p=a,p++,t=p;j
i=j-1;
while((i>=0)&&(*q>p))
q--,i--;
q++;//q璺熻釜a[i+1]
t++;//t璺熻釜a[j+1]
rotate(q,p,t);
}
}
//template
//void insertionSort(const Iterator &a, const Iterator &b){
// typedef typename iterator_traits::value_type T;
// int i,j,n=distance(a,b);
// T key;
// Iterator p,q,t;
// for(j=1,q=p=a,p++,t=p;j
// key=*p;//key鈫恆[j]
// i=j-1;
// while((i>=0)&&(*q>key)){
// *t=*q;//a[i+1]鈫恆[i]
// i--,t--,q--;
// }
// *t=key;//a[i+1]鈫恔ey
// }
//}
template
void insertionSort(const Iterator &a, const Iterator &b){
int i,j,n=distance(a,b);
Iterator p,q,t;
for(j=1,q=p=a,p++,t=p;j
i=j-1;
while((i>=0)&&Comparator()(*q,*p))
q--,i--;
q++;//q璺熻釜a[i+1]
t++;//t璺熻釜a[j+1]
rotate(q,p,t);
}
}
#endif /
_INSERTIONSORT_H */
测试代码:

#include
#include
#include
#include
#include
#include
using namespace std;
#include "../Utility/partition.h"
#include "../Utility/merge.h"
#include "insertionsort.h"
int main(int argc, char** argv){
// int a[]={1,2,5,8,9,0,3,4,6,7},i;
int a[]={9,8,5,2,1,7,6,4,3,0},i;
string b[]={"AoMen","BeiJing","ShangHai","ChongQing","TianJin","XiangGang"};
// double c[]={0.5,3.7,6.3,8.5,9.2,1.7,2.3,4.1,5.9,7.4};
double c[]={9.2,8.5,6.3,3.7,0.5,7.4,5.9,4.1,2.3,1.7};
vector vb=vector(b,b+6);
list lc=list(c,c+10);
// insertionSort >(a,a+10);
merge >(a,a+5,a+10);
// inplace_merge(a,a+5,a+10,greater());
copy(a,a+10, ostream_iterator(cout, " "));
cout<
merge(vb.begin(),vb.begin()+3,vb.end());
// inplace_merge(vb.begin(),vb.begin()+3,vb.end());
// insertionSort::iterator,less >(vb.begin(),vb.end());
copy(vb.begin(),vb.end(), ostream_iterator(cout, " "));
cout<
list::iterator m=lc.begin();
advance(m,5);
merge::iterator,greater >(lc.begin(),m,lc.end());
// inplace_merge(lc.begin(),m,lc.end(),greater());
// insertionSort::iterator,less >(lc.begin(),lc.end());
copy(lc.begin(),lc.end(), ostream_iterator(cout, " "));
cout<<endl;
return (EXIT_SUCCESS);
}
参考于《算法设计、分析与实现C、C++和Java》

解决方案

rotate(q,p,t);只是用来交换p q,还是插入排序,有什么不懂?

时间: 2024-11-05 17:26:08

C++编程问题:不懂如何用rotate实现插入排序求指教。源代码如下的相关文章

信息-C++编程问题,不是很懂,求大神解决

问题描述 C++编程问题,不是很懂,求大神解决 定义一个Computer类,包括数据成员CPU(字符串)和Memory(字符串),定义构造函数初始化CPU和Memory的值,定义函数showInfo()显示系统配置信息.定义一个MobilePhone类,包括数据成员联系人Contact(字符串数组),定义构造函数初始化Contact的值,定义函数display()显示联系人信息,定义函数call()拨打电话.定义派生类SmartPhone,继承Computer和MobilePhone类,新增数据

vc++编程问题-编程实现DFA识别字符串的过程,求大神解答

问题描述 编程实现DFA识别字符串的过程,求大神解答 编程实现DFA识别字符串的过程,1DFA的输入与DFA的存储,确定DFA的数据结构以及存储格式2DFA的正确性检查,看DFA的五元组是否正确,3输入任意一个整数N,DFA的能列表显示其识别的所有长度小于等于N的字符串4DFA的规则字符串判定,输入一个字符串,模拟DFA识别字符串的过程,判定该字符串是否是规则字符串 解决方案 1.dfa算法不是几十行代码可以搞定的: 2.可以使用线程cfa算法库,没有必要自己再实现一个dfa算法.

c语言编程-C语言编程,拜托了,各位大侠,求正解,!!!

问题描述 C语言编程,拜托了,各位大侠,求正解,!!! **** 编程模拟一物体沿斜面加速下滑并在水平面逐渐减速(如图3所示)的物理过程.并给出各个图标的内容或设置. ****

linux编程问题,expect脚本问题,急求

问题描述 linux编程问题,expect脚本问题,急求 #!/usr/bin/expect -f set IP [lindex $argv 0 ] spawn scp /root/.ssh/id_rsa.pub root@${IP}:/root/.ssh/ expect { "Are you sure you want to continue connecting*" { send "yesr"; exp_continue } 写了个脚本,大概是这样,但现在有个问

如何用汇编语言编写程序 求大神帮忙

问题描述 如何用汇编语言编写程序 求大神帮忙 数据段定义10个连续的16位无符号数FBNC-ARRAY(每个数组元素占用一个字,共10个元素,用于保存斐波那契数列的前10项),其中前两个元素分别是0和1,此外还要定义一个双字变量SUM,编写程序,计算所有10个斐波那契数据的和,保存在SUM中. 解决方案 {求大神帮忙!!!!!!}求大神帮忙,急!!用的vs2005,这怎么解决呢,求大神帮忙 解决方案二: 这个很简单 啊,自己看看基本的汇编指令就行了,所编选一个编译器,都支持ASM的(汇编). 解

数据结构 算查找算法-新人自学数据结构,,发现不懂,,题目如下: 求大神 解答,,感激不尽……

问题描述 新人自学数据结构,,发现不懂,,题目如下: 求大神 解答,,感激不尽-- . 已知一非空有序表,表中记录按关键字递增排列,以不带头结点的单循环链表作存储结构,外设两个指针 h 和 t,其中 h 始终指向关键字最小的结点,t 则在表中浮动,其初始位置和 h 相同,在每次查找之后指向刚查到的结点.查找算法的策略是:首先将给定值 K 和 t->key 进行比较,若相等,则查找成功:否则因 K 小于或大于 t->key 而从 h 所指结点或 t 所指结点的后继结点起进行查找.试按上述查找过程

如何用tomcat运行servlet,求详细步骤(新手求助)

问题描述 如何用tomcat运行servlet,求详细步骤(新手求助) tomcat已经配置完成,输入localhost://8080也能成功打开,但是如果我已经在eclipse成功编译了GetParameter .java,并成功生成了.class文件,我该如何用tomcat运行 解决方案 第一,你的GetParameter类必须extends HttpServlet 第二,你的Web项目中必须添加tomcat 第三,你必须配置web.xml 格式如下 你的servlet类名servlet所在

求指教,多处看不懂,最好能全部注释,谢谢!!

问题描述 求指教,多处看不懂,最好能全部注释,谢谢!! public class Scaner { public static void main(String[] args) { printFiles(new File("../HelloFile"),1); } public static void printFiles(File dir,int tab) { if (dir.isDirectory()) { File[] next=dir.listFiles(); for (int

编程-[叫兽*求指教] 有关于 登陆器的问题 求大神提提意见

问题描述 [叫兽*求指教] 有关于 登陆器的问题 求大神提提意见 还只是刚学编程 想写一个可以批量在网页登陆选区的工具,请教下大神们应该怎样实现??因为还比较loser 所以想问一下 实现思路 然后再根据思路去学习 去 实现....................(~--~) 谢谢帮助哈. 解决方案 刚学编程建议你使用易语言,它简便易用,并且是脚本小子们制作各种网页小偷和游戏外挂的首选工具.