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. 转:android 录制视频的Demo

    转:http://blog.csdn.net/peijiangping1989/article/details/7049991 在这里给出自己的一个测试DEMO,里面注释很详细.简单的视频录制功能. ...

  2. UIToolbar自定义背景及按钮设置

      //1.创建toolbar(MyToolbar继承UIToolbar) _myToolbar = [[MyToolbar alloc]initWithFrame:CGRectMake(kZero, ...

  3. 提高HTML5 Canvas性能的技巧

    详细内容请点击 一:使用缓存技术实现预绘制,减少重复绘制Canvs内容 很多时候我们在Canvas上绘制与更新,总是会保留一些不变的内容,对于这些内容 应该预先绘制缓存,而不是每次刷新. 直接绘制代码 ...

  4. Markdown 学习资源

    语法 Mastering Markdown Markdown Cheatsheet pandoc 在线预览工具

  5. C#反射技术的简单操作(读取和设置类的属性)

    public class A { public int Property1 { get; set; } } static void Main(){ A aa = new A(); Type type ...

  6. Oracle数据库对象_同义词

    同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化SQL语句的书写. 同义词的概念和类型 利用同义词可以为用户的一个对象,或者其他用户的一个对象定义别名,从而简化命 ...

  7. Cocos2d-JS中的cc.LabelTTF

    cc.LabelTTF是使用系统中的字体,它是最简单的标签类.cc.LabelTTF类图如下图所示,可以cc.LabelTTF继承了cc.Node类,具有cc.Node的基本特性. LabelTTF类 ...

  8. DTCMS使用ajax局部刷新

    动力启航的DTCMS代码遇到的问题: 前台post请求: $.ajax({ type: "POST", url: sendUrl, dataType: "json&quo ...

  9. gulp基础使用总结

    gulp 安装 1 检测电脑有没有安装node 执行 $ node -v $ npm -v 如果没有安装的话,可以到https://nodejs.org/en/download/下载安装. 2 全局安 ...

  10. Integer类的装箱和拆箱到底是怎样实现的?

    先解释一下装箱和拆箱: 装箱就是  自动将基本数据类型转换为包装器类型:拆箱就是  自动将包装器类型转换为基本数据类型. 下表是基本数据类型对应的包装器类型: int(4字节) Integer byt ...