zoukankan      html  css  js  c++  java
  • 算法模板

    选择

    void selection(vector<int>& vec) {
    	if(vec.size() <= 1) return;
    	for(int i = 0; i<vec.size() - 1; ++i) {
    		int minidx = i;
    		for(int j = i + 1; j < vec.size(); ++j) {
    			if(vec[minidx] > vec[j])
    				minidx = j;
    		}
    		if(i != minidx) swap(vec[i], vec[minidx]);
    	}	
    }
    

    冒泡

    void bubbleSort(vector<int>& vec) {
    	bool isSorted = false;
    	for(int i = vec.size()-1; !isSorted && i>0; --i) {
    		isSorted = true;
    		for(int j = 0; j < i; ++j) {
    			if(vec[j] > vec[j+1]) {
    				isSorted = false;
    				swap(vec[j], vec[j+1]);
    			}
    		}
    	}
    }
    

    插入排序

    void insertSort(vector<int>& vec) {
    	for(int i = 0; i<vec.size() -1 ; ++i) {
    		int j = i+1;
    		int tmp = vec[j];
    		while(vec[j-1] > tmp) {
    			vec[j] = vec[j-1];
    			--j;
    		}
    		vec[j] = tmp;
    	} 
    }
    

    快速排序

    /*
    ** quick sort array [lo, hi]
    **/
    void quick_sort(int a[], int lo, int hi) {
    	if(lo >= hi)
    		return;
    	int i = lo - 1, j = hi + 1, x = a[lo + hi >>1];
    	while(i < j) {
    		do i++; while(a[i] < x);
    		do j--; while(a[j] > x);
    		if(i < j) swap(a[i], a[j]);
    	}
    	quick_sort(a, lo, j);
    	quick_sort(a, j+1, hi);
    } 
    

    归并排序

    /*
    **  merge sort array [lo, hi]
    */
    void merge_sort(int a[], int lo, int hi) {
    	if(lo >= hi) return;
    	int mid = lo + hi >> 1;
    	merge_sort(a, lo, mid);
    	merge_sort(a, mid+1, hi);
    	
    	int i = lo, j = mid+1, k=0;
    	int* tmp = new int(hi-lo+1);
    	while(i<=mid && j<=hi) {
    		if(a[i] < a[j])
    			tmp[k++] = a[i++];
    		else
    			tmp[k++] = a[j++];
    	}
    	while(i<=mid)
    		tmp[k++] = a[i++];
    	while(j<=hi)
    		tmp[k++] = a[j++];
    	for(int m=0; m<hi-lo+1; m++) a[m] = tmp[m];
    } 
    

    数据结构

    字符串

    KMP

    vector<int> getNext(char s[], int len) {
        int j = -1;
        vector<int> next(len,0);
        next[0] = -1;
        for(int i=1; i<len; ++i) {
            while( j != -1 && s[j+1] != s[i])
                j = next[j];
            if( s[j + 1] == s[i]) ++j;
            //next[i] = j;
            if( j == -1 || next[i+1] != next[j+1])
                next[i] = j;
            else
                next[i] = next[j];
        }
    }
    
    bool KMP(char text[], char pattern[]) {
        int n = strlen(pattern);
        vector<int> next = getNext(pattern, n);
        int j = -1;
        for(int i=0; i<strlen(text); ++i) {
            while( j != -1 && text[i] != pattern[j+1])
                j = next[j];
            if(text[i] == pattern[j+1]) ++j;
            if(j == n-1) return true;
        }
        return false;
    }
    
  • 相关阅读:
    1.LOAM安装
    查看memcached运行状态
    (转)服务器故障排查,侵删
    百度地图tilesloaded只触发一次
    Linux 安装NVIDIA显卡
    Oracle常用sql(持续更新)
    jetBrain idea 常用插件整理
    关于swiper4 一个页面多个轮播的问题
    linux 日常工作常用软件(持续更新)
    WPS for Linux ,Linux平台最好的文档编辑软件,没有之一
  • 原文地址:https://www.cnblogs.com/pusidun/p/12239001.html
Copyright © 2011-2022 走看看