常用算法的C++实现

//
// DZAppDelegate.m
// AlgorithmTest
//
// Created by dzpqzb on 13-8-4.
// Copyright (c) 2013年 dzpqzb inc. All rights reserved.
// #import "DZAppDelegate.h" #import <vector>
#import <iostream>
#import <fstream>
#import <ctime> static char* const kDataFilePath = "data.txt";
const int MaxDataLength = 10; using namespace std; vector<int> sortData; void randNum()
{
ofstream fp(kDataFilePath);
if (fp.fail()) {
cout << "open data file error!" << endl;
exit(EXIT_FAILURE);
}
srand((unsigned) time(NULL));
for (int i = 0; i < MaxDataLength; ++i) {
sortData.push_back(rand()%100);
}
fp.close();
} void printVectorInt(vector<int> a )
{
cout << endl;
for (vector<int>::iterator itor= a.begin(); itor != a.end(); itor++) {
cout << *itor << "\t";
}
cout << endl;
} int partion(vector<int> &v, int low, int high)
{
int pivotkey;
pivotkey = v[low];
while (low < high) {
while (low < high && v[high] >= pivotkey) {
high--;
}
v[low] = v[high]; while (low < high && v[low] <= pivotkey) {
low ++;
}
v[high] = v[low];
}
v[low] = pivotkey;
return low;
} void quickSort(vector<int> &v, int left, int right)
{
if (left < right)
{
int i = partion(v, left, right);
quickSort(v, left, i-1);
quickSort(v, i+1, right);
}
} void mergeverctor(vector<int>& v, int start, int mid, int end)
{
int j, k,l;
vector<int> temp(v); for(j = mid+1, k = start; start <= mid && j <= end; k++)
{
if (temp[start] < temp[j]) {
v[k] = temp[start++];
}
else
{
v[k] = temp[j++];
}
}
if (start <= mid) {
for (l=0; l < mid-start; ++l) {
v[k+1] = temp[start+1];
}
}
if (j <= end) {
for (l=0; l < end - j; ++l) {
v[k+1] = temp[j+1];
}
}
} void mergeSort(vector<int>&v, int low, int high)
{
if (low < high) {
int mid =(low + high)/2;
mergeSort(v, low, mid);
mergeSort(v, mid+1, high);
mergeverctor(v, low, mid, high);
}
}
void (^MergeSort)(vector<int>&) = ^(vector<int>&v)
{
mergeSort(v, 0, (int)v.size()-1);
}; void (^QuickSort)(vector<int>&) = ^(vector<int>& v)
{
quickSort(v, 0, (int)(v.size()-1));
}; void (^InsertSort)(vector<int>&) = ^(vector<int>&v)
{
int i , j ;
int key;
for(i =1; i < v.size(); ++i)
{
if(v[i] < v[i-1])
{
key = v[i];
for(j = i-1; key < v[j] ; --j)
{
v[j+1] = v[j];
}
v[j+1] = key;
}
}
};
void (^ASort)(vector<int>&) = ^(vector<int>&v)
{ }; void (^SelectSort)(vector<int>&) = ^(vector<int>&v)
{
int i, j , min;
for(i = 0; i < v.size(); ++i)
{
min = i;
for(j=i+1; j<v.size(); ++j)
{
if(v[j] < v[min]) min = j;
}
if(min != i)
{
swap(v[i], v[min]);
}
}
}; void (^BubbleSort)(vector<int>&) = ^(vector<int>&v)
{
int i ,j;
for( i = 0; i < v.size(); ++i)
{
for( j = i+1; j < v.size(); ++j)
{
if(v[i] > v[j])
{
swap(v[i], v[j]);
}
}
}
}; void heapAdjust(vector<int>&v, int s, int m)
{
int rc, j;
rc = v[s];
for (j = 2*s ; j<=m; j *=2) {
if (j<m && v[j] < v[j+1]) {
j++;
} if (rc >= v[j])
{
break;
} v[s] = v[j];
s = j;
}
v[s] =rc;
}
void (^HeapSort)(vector<int>&) = ^(vector<int>&v)
{
int i;
for(i=(int)v.size()/2; i >0; i--)
{
heapAdjust(v, i, (int)v.size()-1);
}
for(i = (int)v.size() -1; i >0; i--)
{
int t = v[0];
v[0] = v[i];
v[i] = t; heapAdjust(v, 0, i-1);
}
}; typedef void(^SortAlgorithm)(vector<int>&);
void (^TestSortTime)(SortAlgorithm algrotithm) = ^(SortAlgorithm algorithm)
{
double start, end;
start = clock();
vector<int> a(sortData);
cout << "Origin is:";
printVectorInt(a);
algorithm(a);
end = clock();
cout << "Result is :";
printVectorInt(a);
cout << "Time is:" << end - start << endl;
cout <<"******************************************" <<endl;
}; @implementation DZAppDelegate - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
randNum();
// Insert code here to initialize your application
TestSortTime(QuickSort);
//
TestSortTime(InsertSort);
//
TestSortTime(BubbleSort);
//
TestSortTime(SelectSort);
//
TestSortTime(MergeSort);
TestSortTime(HeapSort);
} @end

常用算法的C++实现的更多相关文章

  1. 总结Objective-c常用算法

          今天是星期天,想睡到10点起床,结果认为自己太奢侈了,不能这么做,于是把闹钟设置成了6:30:结果终于9:36醒了,起床,无缘无故迟了,好吧,就算太累了吧,周天就原谅自己一回.终于到了中午 ...

  2. Atitit 编程语言常用算法attilax总结

    Atitit 编程语言常用算法attilax总结 1. 编译算法分类and   数据操作算法.1 1.1. Tab driver stat  状态转换表格算法1 1.2. Nest case 词法分析 ...

  3. GJM : 数据结构 - 轻松看懂机器学习十大常用算法 [转载]

     转载请联系原文作者 需要获得授权,非法转载 原文作者将享受侵权诉讼 文/不会停的蜗牛(简书作者)原文链接:http://www.jianshu.com/p/55a67c12d3e9 通过本篇文章可以 ...

  4. ACM常用算法及练习(2)

    ACM常用算法及练习 知识类型 重要度 容易度 应掌握度 典型题 其他           数据结构(5) 链表 ★★☆ ★★★ ★★☆     栈 stack ★★★ ★★★ ★★★ HLoj120 ...

  5. ACM常用算法及练习(1)

    ACM常用算法及练习 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来. 1.最短 ...

  6. C/C++常用算法【C语言顺序查找(随机数)】【1】

    这是我学习唐峻,李淳的<C/C++常用算法第一天> 1.8.1. 查找数字: 程序随机生成一个拥有20个整数数据的数组,然后输入要查找的数据.接着,可以采用醉简单的逐个对比的方法进行查找, ...

  7. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  8. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  9. 剑指Offer——知识点储备-常用算法

    剑指Offer--知识点储备-常用算法 快速排序 注:若排序是有序的,采用快排,则退化为冒泡排序. 解决这个问题,采用两个选取基准的方法 (1)随机选取基数(在这个区间内随机取一个数) 出现的恶劣情况 ...

  10. javascript中数组的常用算法深入分析

    Array数组是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array是前端必修的功课.本文将给大家详细介绍了javascri ...

随机推荐

  1. nginx 反向代理https

    nginx 反向代理https   原来我用vertx创建了一个https apiserver,想着用nginx反向代理一下.证书是阿里云上免费一年的. 后来发现nginx要反向代理https自己也必 ...

  2. JAVA基于权重的抽奖

    https://blog.csdn.net/huyuyang6688/article/details/50480687 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果中A:B:C:D的 ...

  3. 可变参数的lambda表达式

    delegate int mydelegate(params int[] a); class Program { static void Main(string[] args) { //接收可变参数的 ...

  4. SQL Server将DataTable传入存储过程(Table Value Parameter)

    博主在做毕业设计的时候,需要用到事务处理和多次将数据写入不同的表中,但是 SQL Server 数据库是不支持数组类型变量的,想要实现数组的功能,可以通过 XML 和数据表的方法实现,但是实现方法非常 ...

  5. Java CountDownLatch解析(上)

    写在前面的话 最近一直在边工作边学习分布式的东西,看到了构建Java中间件的基础知识,里面有提到Java多线程并发的工具类,例如ReentrantLock.CyclicBarrier.CountDow ...

  6. [翻译]Review——Learn these core JavaScript concepts in just a few minutes

    Learn these core JavaScript concepts in just a few minutes(只需几分钟即可学习这些核心JavaScript概念) 原文地址:https://m ...

  7. 51NOD1847:奇怪的数学题

    传送门 Sol 设 \(f(d)\) 表示 \(d\) 所有约数中第二大的,\(low_d\) 表示 \(d\) 的最小质因子 \[f(d)=\frac{d}{low_d}\] 那么 \[\sum_{ ...

  8. cf1088D. Ehab and another another xor problem(思维)

    题意 题目链接 系统中有两个数\((a, b)\),请使用\(62\)以内次询问来确定出\((a, b)\) 每次可以询问两个数\((c, d)\) 若\(a \oplus c > b \opl ...

  9. PHP开发支付宝之电脑网站支付--流程简介

    前言 前端时间自己开发了一个drupal的支付宝模块,现在整理一下过程,因为支付宝官方网站提供的接口及文档都是新接口的,而且使用新接口的过程比较麻烦一点,所以整理一下 1.支付宝的账号必须经过企业资格 ...

  10. 从接口取到的JSON数据如何导入进本地SQL数据库

    新手学习,求大神指点. 首先:在数据库建立表--设计字段(最好和接口说明文档里面的一致) 第一步:获取接口中的字符串:这里获取的是有转义字符的字符串 HttpWebRequest request = ...