高速排序-c++(分别用数组和容器实现)
/**********************************************************************
*版权全部 (C)2014, cheng yang。
*
*文件名:高速排序.cpp 数组实现
*内容摘要:无
*其他说明:无
*当前版本号: V1.0
*作 者:cheng yang
*完毕日期: 20140625
*
* 版本号 改动时间 改动人 改动内容
********************************************************************
* V1.0 20140625 cy 创建
**********************************************************************/
#include<iostream>
#include <vector>
using namespace std;
inline void swap(int &a, int &b)//是取地址,是要改动数组的!!。!!
{
int iTemp = a;
a = b;
b = iTemp;
}
/**********************************************************************
*功能描写叙述:数组的划分
*输入參数:数组,数组首下标。数组尾下标
*输出參数:无
*返回值:主元下标
*其他说明:无
*改动日期 版本号号 改动人 改动内容
* --------------------------------------------------------------
*
***********************************************************************/ int Partition(int ArrayInput[],int iFirst, int iLast)
{
int iKey = ArrayInput[iLast];
int j = iFirst-1 ;
for (int i = iFirst; i != iLast; i++)
{
if (ArrayInput[i] <= iKey)
{
j++;
if (j != i)
{
swap(ArrayInput[j], ArrayInput[i]); }
}
}
swap(ArrayInput[iLast], ArrayInput[j + 1]);
return j + 1;
}
/**********************************************************************
*功能描写叙述:quick sort
*输入參数:数组。数组首下标。数组尾下标
*输出參数:无
*返回值:无
*其他说明:无
*改动日期 版本号号 改动人 改动内容
* --------------------------------------------------------------
*
***********************************************************************/
void QuickSort(int ArrayInput[],int iFirst, int iLast)
{ if (iFirst < iLast)
{
int iIndex = Partition(ArrayInput,iFirst, iLast);
QuickSort(ArrayInput, iFirst, iIndex - 1);
QuickSort(ArrayInput,iIndex + 1, iLast);
}
} /****************************************************************
*功能描写叙述: 主函数 *
*输入參数: 无 *
*输出參数: 无 *
*返回值 :无 *
*其他说明: 无 *
*改动日期 版本号号 改动人 改动内容
* ------------------------------------------------------------------
*
****************************************************************/ int main()
{
int ArrayInput[10] = { 2, 4, 1, 5, 11, 6, 9, 16, 23, 10 };
int iFirst = 0;
int iLast = 9;
QuickSort(ArrayInput,iFirst, iLast); int i = 0;
while (i < 10)
{
cout << ArrayInput[i++] << endl;
}
system("pause");
}
容器实现
#include <iostream>
#include <vector>
using namespace std; inline void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
} template<class T>
int Partition(vector<T>& a, int istart, int iend)
{
int ipivot = a[iend];
int i = istart - 1;
for (int j = istart; j != iend; j++)
{
if (a[j] <= ipivot)
{
i++;
if (i != j)
{
swap(a[i], a[j]);
}
}
}
swap(a[iend], a[i + 1]);
return i + 1;
} template<class T>
void QuickSort(vector<T>& a, int istart, int iend)
{
if (istart< iend)
{
int ipivot_pos = Partition(a, istart, iend);
QuickSort(a, istart, ipivot_pos - 1);
QuickSort(a, ipivot_pos + 1, iend);
} }
int main()
{
vector<int> a;
int input{ 0 };
while (cin >> input)
a.push_back(input);
int istart = 0;
int iend = a.size()-1;//输入6个数,大小是6,数组下标别忘了减1啊 QuickSort(a, istart, iend);
for (auto i = a.begin(); i != a.end(); i++)
{
cout << *i << endl;
}
system("pause");
return 0;
}
高速排序-c++(分别用数组和容器实现)的更多相关文章
- 《算法导论》 — Chapter 7 高速排序
序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...
- C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序
C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序 标签: 数据结构 数组 链表 高速排序 归并排序 抽象类 虚继承 by 小威威 1.介绍 本篇博文将通过课后作业的(15 C++ Hom ...
- Java编程思想学习(十二) 数组和容器
一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...
- 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)
在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...
- 经典排序算法 - 高速排序Quick sort
经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- 高速排序,归并排序,堆排序python实现
高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...
- 高速排序C++实现
//高速排序 #include<iostream> #include<functional> #include<Windows.h> using namespace ...
- 排序算法之高速排序(Java)
//高速排序 public class Quick_Sort { // 排序的主要算法 private int Partition(int[] data, int start, int end) { ...
随机推荐
- Javascript 追本溯源
一直以来对Javascript的继承关系都是通过死记硬背下来的,对于一个理科生,喜欢逻辑思维的人来讲,死记硬背特别头痛,且理科生对于能够死记硬背下来的东西也很容易忘记,不知道其他理科生童鞋们是否如此, ...
- CriticalFinalizerObject的作用
CriticalFinalizerObject 在从 CriticalFinalizerObject 类派生的类中,公共语言运行库 (CLR) 保证所有关键终止代码都有机会执行, 即使是在 CLR 强 ...
- 昨天mac更新后,网络又出问题了。。。
情况如图...
- spark 环境变量系列配置
1. hadoop core-site.xml配置
- eclipse sae上传代码
eclipse sae上传代码http://www.sinacloud.com/doc/sae/java/tools.html#eclipse 来自为知笔记(Wiz)
- html5 利用canvas实现简单的人物走动
最近在学习html5,其中涉及到很关键的元素canvas-画布,在网上下载了一些游戏源代码,虽然能看懂,但是想单独地针对某个功能提取出来还是有难处的,于是乎自己又上网查找了一些例子,才将超级玛丽简单的 ...
- 使用开源word操作组件DocX的记录
1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...
- laravel中StartSession中间件的问题
今天使用了laravel的dingoapi插件做了一些功能,但是最后遇到一个问题,我在页面和api的路由组中都加了一个相同的以session为基础的身份验证中间件,然后我以管理员身份登录页面时通过了验 ...
- NET调用Java之100-Continue的坑
场景:这段时间开发的时候遇到了需要NET调用java的restful api的情况,java端用的服务器是tomcat,框架是spring boot,net调用java端的接口之后只要java端的接口 ...
- 重构遗留程序的一次案例学习(java程序)
遗留代码经常是腐臭的,每个优秀的开发者都想把它重构.而进行重构的一个理想的先决条件是,它应该包含一组单元测试用例,以避免产生回归缺陷.但是为遗留代码编写单元测试可不是件容易的事,因为它经常是一团糟.要 ...