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和数组的不同)的更多相关文章

  1. [转]STL中vector转数组(实际是数组的指针)

    感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.ht ...

  2. vector 和数组 之间的转化

    1.数组转vector float arrHeight[] = { 1.68,1.72,1.83,2.05,2.35,1.78,2.1,1.96 };  vector<float> vec ...

  3. vector转数组

    vector转数组 由于vector内部的数据是存放在连续的存储空间,vector转数组事实上只需要获取vector中第一个数据的地址和数据的长度即可.如果仅仅是传参,无需任何操作,直接传地址即可,如 ...

  4. vector代替数组

    vector代替数组 1.声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除). 2.用vector ...

  5. vector和数组

    对于之前没有接触过vector的初学者来说,经常会把vector和数组弄混,因为二者在用的时候比较像,下面就详细的来介绍一下vector和数组的区别. (1) 首先,vector类似于数组,有一段连续 ...

  6. 【译】Rust中的array、vector和slice

    原文链接:https://hashrust.com/blog/arrays-vectors-and-slices-in-rust/ 原文标题:Arrays, vectors and slices in ...

  7. 大整数四则运算(vector与数组两种版本实现)

    每逢大整数四则运算,都会怯懦,虽是算法竞赛必会的东西,也零散的学过,简单的总结过,但不成体系的东西心里一直没底. 所以今天消耗了大量的卡路里,啃了几套模板之后终于总结成了一套自己的模板 再也不用担心大 ...

  8. R中一切都是vector

    0.可以说R语言中一切结构体的基础是vector! R中一切都是vector,vecotor的每个component必须类型一致(character,numeric,integer....)!vect ...

  9. 42-python中的矩阵、多维数组----numpy

    xzcfightingup   python中的矩阵.多维数组----numpy 1. 引言 最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易, ...

随机推荐

  1. 实现toolbar透明的背景效果

    //MyToolbar.h 头文件 @interface MyToolbar : UIToolbar @end //MyToolbar.m 实现文件 #import "MyToolbar.h ...

  2. js 数组的length(javascript教程四)

    这是一个简单的函数,就是利用length来判断数组再遍历数组了. <script language="javascript" type="text/javascri ...

  3. JavaScript语言常量和变量

    我们在以往介绍使用JavaScript编写一个HelloJS的小程序,其中我们就用到变量.常量和变量是构成表达式的重要组成部分.常量在声明和初始化变量时,在标识符的前面加上关键字const,就可以把该 ...

  4. 二叉树-你必须要懂!(二叉树相关算法实现-iOS)

    这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...

  5. IOS开发: 为UIImageView添加点击事件

    转载于:http://www.pocketdigi.com/20140218/1276.html UIImageView并不像UIButton一样,点点鼠标就可以关联点击事件,也不像Android里有 ...

  6. Objective-C 【autorelease基本使用】

    ------------------------------------------- NSString中的内存管理问题 由于autoreleasepool的存在,对于内存管理就会很复杂,retain ...

  7. 让人心动的jQuery插件和HTML5动画

    1.jQuery/CSS3带表单的下拉菜单 今天要分享一款基于jQuery和CSS3的下拉菜单,这款jQuery下拉菜单非常特别,我们直接可以在下拉菜单中填写联系表单.登录表单.而且整个下拉菜单的外观 ...

  8. SpringMvc入门二----HelloWorld

    1. 导入需要的架包: 2. 配置web.xml,添加Servlet <servlet> <servlet-name>springmvc</servlet-name> ...

  9. ArcGIS Desktop开发基础(转)

    http://www.cnblogs.com/maweifeng/archive/2006/07/19/455024.html  原文地址 ArcGIS Desktop开发的类型 ○ 自定义ArcMa ...

  10. C++ Maps 映射

    C++ Maps是一种关联式容器,包含“关键字/值”对 begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空 ...