高速排序-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) { ...
随机推荐
- hdu 2689
hdu 2689 超级大水题....两种代码都过了,开始以为n^2会tle,后来竟然过了...汗 注意下cin写在while里面,就可以了 #include <iostream> usin ...
- Asp.net 回车默认按钮
<head> <script type="text/javascript"> function OnKey() { if (ev ...
- php function_name($type=0,$order_ids='',$flag=2)
$order_ids='',表示$order_ids是字符串,不是数组 foreach ($order_ids as $key=>$order_id){ //TODO} 这 ...
- Excel连接字符串(Oledb)
Excel的连接字符串参数详解 2011-07-27 15:43:50| 分类: 编程专栏 | 标签:excel 连接字符串 参数 含义 |字号大中小 订阅 程序中读取Excel ...
- mysql 写数据操作几次硬盘?
mysql 写数据步骤: 1:写入操作事物日志,持久化操作日志到磁盘,并且只是写在磁盘上一小块区域内的顺序io,不需要像随机io一样 在磁盘多个地方移动磁头 2:内存中事物日志持久化以后 ,写入的数 ...
- Ps 美白磨皮【1】
方法一:去色加图层模式法 打开需要编辑的图片,按Ctrl+J复制新的图层1. 点击菜单栏“图像”-“调整”-“去色”,如下图所示. 将图层面板的混合模式更改为“滤色”,如下图4所示. 最后的显示效 ...
- 【C++学习之路】派生类的构造函数(三)
三.多层继承的派生类 1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可 class student { public: student(int n, string nam) ...
- 自己寫的 Loading JS插件
本文為原創文章,轉載請注明出處,謝謝./** * @author samkin.yang * @version 1.0 */var $_yxj = new SamkinLoading(); (func ...
- Js判断密码强度并显示提示信息
用javascipt实现的Ajax判断密码强弱的功能,大多数有用户注册功能的网站,都会有这么一个功能,作为WEB程序员,应该会写这种小模块哦,不懂的就看下这个例子,觉得挺简单,当初帮助了不少人学会了密 ...
- Python一路走来 - python基础 数据类型
对于Python,一切事物都是对象,对象基于类创建 Python数据类型 python主要的数据类型主要包括以下几种类型: (1) 数字型 (2) 字符串 (3) 列表 (4) 元组 (5) 字典 ( ...