参考:

快速排序

堆排序

各类排序

#include <iostream>
#include <vector>
#include <time.h>
#include <cstdlib>
//......自行添加其他必要的库
using namespace std;
#define num 100
//各种排序方法的函数声明,有兴趣选做注释部分排序算法
//template<class T>
//void BubbleSort(vector<T> &x);//冒泡排序
//template<class T>
//void SelectSort(vector<T> &x);//选择排序
//template<class T>
//void InsertSort(vector<T> &x);//插入排序
//template<class T>
//void ShellSort(vector<T> &x);//希尔排序
//template<class T>
//void CountedSort(vector<T> &x);//计数排序
//template<class T>
//void RadixSort(vector<T> &x);//基数排序
//template<class T>
//void BSTSort(vector<T> &x);//选做:二叉查找树排序 template<class T>
void QuickSort(vector<T> &x, int first, int end);//快速排序
template<class T>
void HeapSort(vector<T> &x);//堆排序
template<class T>
void Heapfy(vector<T> &x, int first, int end); //堆调整 template<class T>
void Display(vector<T> &x);
template<class T>
void ResetData(vector<T> &x,vector<T> &y);//使用y重置x
//......自行添加其他必要的函数声明
int main()
{
clock_t start,finish;
double totaltime; vector<int> a(num+),b(num+);
int i;
srand(time());//随机数种子初始化 for(i=;i<=num;i++)
{ a[i]=rand()%+; //随机生成1-10000内的数值作为排序对象
b[i]=a[i];
} //排序前显示数据
cout<<"排序前"<<endl;
Display(a);
//冒泡排序
// BubbleSort(a);
//cout<<"冒泡排序后"<<endl;
//Display(a);
//选择排序
// ResetData(a,b);
// SelectSort(a);
// cout<<"选择排序后"<<endl;
// Display(a);
//插入排序
// ResetData(a,b);
// InsertSort(a);
// cout<<"插入排序后"<<endl;
// Display(a);
//希尔排序
// ResetData(a,b);
// ShellSort(a);
// cout<<"希尔排序后"<<endl;
// Display(a);
//计数排序
// ResetData(a,b);
// CountedSort(a);
// cout<<"计数排序后"<<endl;
// Display(a);
//基数排序
// ResetData(a,b);
// RadixSort(a);
// cout<<"基数排序后"<<endl;
// Display(a);
//快速排序 ResetData(a,b);
start = clock();
QuickSort(a,,num);
finish = clock();
cout<< endl << "快速排序后"<<endl;
totaltime = (double)(finish-start)/CLOCKS_PER_SEC;
cout << "time: " << totaltime << "s" << endl;
Display(a); //堆排序
ResetData(a,b);
start = clock();
HeapSort(a);
finish = clock();
cout<< endl << "堆排序后"<<endl;
totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
cout << "time: " << totaltime << "s" << endl;
Display(a);
cout << endl;
} template<class T>
void Display(vector<T> &x)
{
for(int i=;i<=num;i++)
{ cout<<x[i]<<" ";
if(i%==) cout<<endl;
}
} template<class T>
void ResetData(vector<T> &x,vector<T> &y)//使用y重置x
{
for(int i=;i<=num;i++)
{
x[i]=y[i];
}
} template<class T>
void QuickSort(vector<T> &x, int first, int end){
if( first<end ){
int i=first;
int j=end;
T t=x[i];
while( i<j ){
while( i<j && x[j] >= t ){
j--;
}
if( i<j ){
x[i++] = x[j];
}
while( i<j && x[i] <= t){
i++;
}
if( i<j ){
x[j--] = x[i];
}
}
x[i] = t;
QuickSort(x, first, i-);
QuickSort(x, i+, end);
}
} template<class T>
void Heapfy(vector<T> &x, int p, int len){
int father = p;
int child = *father;
while( child<=len ){
if( child+ <= len && x[child] < x[child+] ){
child++;
}
if( x[child] > x[father] ){
int t=x[child];
x[child] = x[father];
x[father] = t;
father = child;
child = *father;
}
else break;
}
} template<class T>
void HeapSort(vector<T> &x){
for(int i=num/; i>=; i--){ //构造最大堆,但子结点左右孩子大小不分
Heapfy(x, i, num);
}
for(int i=num; i>; i--){ //构造最小堆,使得最左孩子小于右孩子
int t=x[];
x[] = x[i];
x[i] = t;
Heapfy(x,,i-);
}
}

C++ 排序(未完)的更多相关文章

  1. c++稍微复杂桶排序(未完待续~)

    由于上次的桶排序占用空间太多,这次又有了一个新的办法 直接上代码: #include <bits/stdc++.h> using namespace std; int n; void bu ...

  2. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  3. Java开发中的23+2种设计模式学习个人笔记(未完待续)

    注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...

  4. odoo11 model+Recordset 基础未完待续

    Model 一个模型代表了一个业务对象 本质上是一个类,包含了同django flask一样的数据字段 所有定义在模型中的方法都可以被模型本身的直接调用 现在编程范式有所改变,不应该直接访问模型,而是 ...

  5. 数据库索引(Index)【未完待续】

    数据库索引是啥?有什么用?原理是什么?最佳实践什么? 索引是啥 一个索引是这样的数据结构:从数据上来说,不仅包含了从表中某一列或多列的数据拷贝,同时,还包含了指向这列数据行的链接: 从结构上来说,索引 ...

  6. 堆学习笔记(未完待续)(洛谷p1090合并果子)

    上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...

  7. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  8. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  9. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

随机推荐

  1. C#基础提升系列——C#集合

    C#集合 有两种主要的集合类型:泛型集合和非泛型集合. 泛型集合被添加在 .NET Framework 2.0 中,并提供编译时类型安全的集合. 因此,泛型集合通常能提供更好的性能. 构造泛型集合时, ...

  2. 箭头函数以及this指向问题

    一.定义函数的方式 //1.function const aaa = function () { } //2.对象字面量中定义函数 const obj = { bbb() { } } //3.ES6中 ...

  3. 四轴PID思路整理

    参考资料: https://blog.csdn.net/nemol1990/article/details/45131603 https://blog.csdn.net/qq_27114397/art ...

  4. Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)

    一.前言 今天我们继续来讲述逆向的知识,今天我们来讲什么呢?我们在前一篇文章中介绍了关于SO文件的格式,今天我们继续这个话题来看看如何修改SO文件中的内容,看一下我们研究的主题: 需求:想汉化一个Ap ...

  5. View使用总结

    1. View的基础知识 View的位置参数 —— 相对于父容器的位置 view在平移时,top和left表示的是原始左上角位置信息,值不会改变, 改变的是x,y(View左上角坐标),transla ...

  6. flutte页面布局四

    AspectRatio 组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由 ...

  7. LOJ 6436 「PKUSC2018」神仙的游戏——思路+卷积

    题目:https://loj.ac/problem/6436 看题解才会. 有长为 i 的 border ,就是有长为 n-i 的循环节. 考虑如果 x 位置上是 0 . y 位置上是 1 ,那么长度 ...

  8. t时间同步服务设置

    中国国家授时中心的时间服务器IP地址及时间同步方法 大家都知道计算机电脑的时间是由一块电池供电保持的,而且准确度比较差经常出现走时不准的时候.通过互联网络上发布的一些公用网络时间服务器NTPserve ...

  9. mac使用相关笔记

    1.软件提示已损坏,需要移到废纸篓的解决方法 -> sudo spctl --master-disable xattr -r -d com.apple.quarantine <path&g ...

  10. ROM、RAM、DRAM、SRAM、FLASH的区别?

    在学习单片机的时候经常会被这些东西搞晕掉,什么ROM RAM FLASH EEPROM 等等......为了不被搞晕,做个笔记,不记得的时候过来看看. 下面是我在网上找的资料: ROM和RAM指的都是 ...