C++中的快速排序(使用vector和数组的不同)
1.快速排序是最最基本的排序算法之一,时间复杂度是O(nlog2(n))
基本思想:分治法+递归
假设key为该序列的第一个元素,从后往前遍历,找到第一个小于key值的元素,将该元素赋值给左边的起始值,再从前往后遍历,找到第一个大于key值的元素,将其赋值给刚才右边第一个小于key值的值,当low<high,则不断递归,知道有序为止.
在用数组int num[]和C++的vector传递地址时,vector需要传引用,否则,没法得到正确地址,因为vector本质上是一个类对象,因此传值会得不到正确结果,而数组会退化为指针,因此可以直接传值.
template<typename datatype>
void myquicksort(vector<datatype> &vec, int low, int high)//必须传引用,否则出错,因为vector是一个类对象
{
if (low < high)
{
int l = low;
int r = high;
datatype key = vec[l];//记录key值 while (l < r)
{
while (l < r&&key <= vec[r])//从右往左遍历,找到第一个小于key的元素
--r;
vec[l] = vec[r];
while (l < r&&key >= vec[l])//从左往右遍历,找到第一个大于key值的元素
++l;
vec[r] = vec[l];
}
vec[l] = key;//其实此时l=r myquicksort(vec, low, l-);
myquicksort(vec, r + , high);
}
}
int main2()
{
const int len = ;//定义一个常量
vector<int>data;//创建一个vector,存储int类型的元素
for (int i = ; i < len; i++)
{
data.push_back(rand() % );
cout << (data.at(i)) << "\t";
if ((i + ) % == )
cout << endl;
} clock_t start = clock();//使用clock函数需要包含头文件#include<ctime>
myquicksort(data, , len - );
clock_t end = clock();
cout << "排序完成,总共用时:" << (end - start)*1.0 / CLOCKS_PER_SEC << endl;//#define CLOCKS_PER_SEC 1000
for (int i = ; i < len; i++)
{
cout << (data.at(i)) << "\t";
if ((i + ) % == )
cout << endl;
} system("pause");
return ;
}
2.使用数组来传值:
void myquicksort2(int a[], int low, int high)//数组作为函数参数,没有副本机制,退化为指针
{
if (low >= high)//递归终止条件
return;
else
{
int l = low, h = high;
int key = a[l];
while (l<h)
{
while (l < h&&a[h] >= key)
--h;
a[l] = a[h];
while (l < h&&a[l] <= key)
++l;
a[h] = a[l];
}
a[l] = key;
myquicksort2(a, low, l - );
myquicksort2(a, l + , high);
}
}
int main()
{
const int len = ;
int num[len];
for (int i = ; i < len; i++)
{
num[i] = rand() % ;
cout << num[i] << "\t";
if ((i + ) % == )
cout << endl;
}
clock_t t1 = clock();
myquicksort2(num, , len - );
clock_t t2 = clock();
cout << "排序完成,总共用时:" << (t2 - t1)*1.0 / CLOCKS_PER_SEC << endl;
for (int i = ; i < len; i++)
{
cout << num[i] << "\t";
if ((i + ) % == )
cout << endl;
}
system("pause");
return ;
}
C++中的快速排序(使用vector和数组的不同)的更多相关文章
- [转]STL中vector转数组(实际是数组的指针)
感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...
- vector 和数组 之间的转化
1.数组转vector float arrHeight[] = { 1.68,1.72,1.83,2.05,2.35,1.78,2.1,1.96 }; vector<float> vec ...
- vector转数组
vector转数组 由于vector内部的数据是存放在连续的存储空间,vector转数组事实上只需要获取vector中第一个数据的地址和数据的长度即可.如果仅仅是传参,无需任何操作,直接传地址即可,如 ...
- vector代替数组
vector代替数组 1.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除). 2.用vector ...
- vector和数组
对于之前没有接触过vector的初学者来说,经常会把vector和数组弄混,因为二者在用的时候比较像,下面就详细的来介绍一下vector和数组的区别. (1) 首先,vector类似于数组,有一段连续 ...
- 【译】Rust中的array、vector和slice
原文链接:https://hashrust.com/blog/arrays-vectors-and-slices-in-rust/ 原文标题:Arrays, vectors and slices in ...
- 大整数四则运算(vector与数组两种版本实现)
每逢大整数四则运算,都会怯懦,虽是算法竞赛必会的东西,也零散的学过,简单的总结过,但不成体系的东西心里一直没底. 所以今天消耗了大量的卡路里,啃了几套模板之后终于总结成了一套自己的模板 再也不用担心大 ...
- R中一切都是vector
0.可以说R语言中一切结构体的基础是vector! R中一切都是vector,vecotor的每个component必须类型一致(character,numeric,integer....)!vect ...
- 42-python中的矩阵、多维数组----numpy
xzcfightingup python中的矩阵.多维数组----numpy 1. 引言 最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易, ...
随机推荐
- 精益求精, ePub 电子书制作手记
什么是 ePub ePub 是 Electronic Publication 的缩写,意为电子出版,是一个自由的开放标准,属于一种可以“自动重新编排”的内容,也就是文字内容可以根据阅读设备的特性,以最 ...
- http header详解
HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求,服务器给与响应.就整个网络资源 ...
- IOS 9 遇到的问题
IOS9中通过url scheme调用其他app时候,控制台会输入 canOpenURL: failed for URL: "XXXXXX://" - error: "T ...
- 纯JS画点、画线、画圆的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java操作xml的一个小例子
最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...
- ASP.NET中后台注册js脚本攻略(转)
用Page.ClientScript.RegisterClientScriptBlock 和Page.ClientScript.RegisterStartupScript:区别: 1.使用Page ...
- Ubuntu系统下载工具的推荐
源 起 大家在上手一段时间Ubuntu系统后,可能突然想起最近新出了一些电影想要下载来看看,但如果用Wine运行迅雷,不是没反应就是启动后也不能下载,针对这个问题,根据我的使用体验推荐大家两款Ubun ...
- win7 开启休眠
使用cmd命令进行开启,首先点击开始菜单,在“搜索程序和文件”中输入“cmd”,然后点击回车键.如下: 2 弹出如下图的界面,在其中最后的地方输入“powercfg -hibernate on”,然后 ...
- 20150225--ASP.NET基础(2)
一.引用外部样式表或JS,在<head>-</head>标签之间添加: <link href="yangshi.css" type="tex ...
- 2014028-jQuery与正则表达式[转]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...