zoukankan      html  css  js  c++  java
  • 常用算法的C++实现

    常用算法的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 << "	";
        }
        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
    

  • 相关阅读:
    分布式机器学习:算法、理论与实践——【1】
    LLVM Cookbook
    【前端】Webpack 进阶
    Noip2015 运输计划 树上差分 二分答案
    bzoj 2259: [Oibh]新型计算机 最短路 建模
    888E
    [ZJOI2012]旅游 对偶图 树的直径
    [HAOI2007]理想的正方形 单调队列 暴力
    bzoj1457: 棋盘游戏 SG函数 Nim
    Bomb HDU
  • 原文地址:https://www.cnblogs.com/yishuiliunian/p/3289734.html
Copyright © 2011-2022 走看看