/**********************************************************************
*版权全部 (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++(分别用数组和容器实现)的更多相关文章

  1. 《算法导论》 — Chapter 7 高速排序

    序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...

  2. C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序

    C++:探究纯虚析构函数以及实现数组的高速排序与链表的归并排序 标签: 数据结构 数组 链表 高速排序 归并排序 抽象类 虚继承 by 小威威 1.介绍 本篇博文将通过课后作业的(15 C++ Hom ...

  3. Java编程思想学习(十二) 数组和容器

    一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...

  4. 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)

    在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...

  5. 经典排序算法 - 高速排序Quick sort

    经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...

  6. java:高速排序算法与冒泡排序算法

     Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /**   *  * @Description:  * @author:cuiyaon ...

  7. 高速排序,归并排序,堆排序python实现

    高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...

  8. 高速排序C++实现

    //高速排序 #include<iostream> #include<functional> #include<Windows.h> using namespace ...

  9. 排序算法之高速排序(Java)

    //高速排序 public class Quick_Sort { // 排序的主要算法 private int Partition(int[] data, int start, int end) { ...

随机推荐

  1. vs连接mysql

    1.打开vs2012在aspx中添加一个Grid view 控件,,. 2,选择新建数据源. 3,选择数据库. 4,选择新建连接. 5,更改成mysql连接. 6,这里的Server name 是你自 ...

  2. 精通Django或Rails框架

    Django是一个开放源代码的Web应用框架,由Python写成. Rubyon Rails 是一个用于开发数据库驱动的网络应用程序的完整框架.

  3. OUTPUT新增记录入库示例C#+存储过程

    1.C#代码 public int Insert(Entity model) { var parameters = new SqlParameter[] { new SqlParameter(&quo ...

  4. js 定义函数的几种方法 以及如何调用

    /*1.方法调用模式: 先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来执行方法,this即指当前的myobject 对象.*/ var car = { carId ...

  5. CSS中的盒子模型详解

    很多人对盒子模型搞晕头了,下面通过一个简单的代码来分析盒子模型的结构! 为了方便方便观看!在第一个div中画了一个表格,并将其尺寸设置成与div内容大小一样!且设置body的margin和paddin ...

  6. JDBC使用sql语句

    JDBC---连接数据库 java与数据库连接需要驱动,这个驱动则是JDBC,连接的时候需要ip+端口号+dbname 还要用户名和密码 改java文件的编码方式--在项目名点右键属性----把编码方 ...

  7. python的hashlib模块

    # -*- coding: utf-8 -*- """python 的MD5 sha1 模块""" import hashlib #md5的 ...

  8. 【Linux】 任务调度/计划 cron

    实时查看日志: tail -f /var/log/cron 显示任务调度 bash#crontab -u username -l 编辑 bash#crontab -u username -e 内容: ...

  9. 按钮点击效果jquery

    <html><head> <meta charset="UTF-8"> <title>QQ</title> <me ...

  10. 【行为型】Chain of responsibility模式

    职责链模式将对象的请求处理组成链式结构,并将请求按链式结构逐个传递下去,直接被其中的某个处理者处理为止.由此可知,职责链模式的适用场合是对指定请求,可以有多个请求处理者(或称为请求响应者),但用户并不 ...