zoukankan      html  css  js  c++  java
  • 记录两个算法

    第一个,生成look-and-say sequence

    function createNext($pre, $elem = '', $count = 0)
    {
    	$len = strlen($pre);
    	$string = '';
    	$a = substr($pre, 0,1);
    	if($elem == $a) {
    		$count += 1;
    	}else {
    		if($count != 0) {
    			$string .= $count . $elem;
    		}
    			$elem = $a;
    			$count = 1;
    		
    	}
    
    	if($len > 1) {
    		$string .= createNext(substr($pre, 1), $elem, $count);
    	}else {
    		$string .= $count . $elem;
    	}
    
    	return $string;
    }
    
    $stringList = ['1'];
    for($i = 1; $i<10;$i++)
    {
    	$stringList[$i] = createNext((string)$stringList[$i-1]); 
    }
    echo "<pre>";
    print_r($stringList);
    

      第二个,分治排序

    function mergeSort($arr, $left, $right) {
    	if($left >= $right) {
    		return $arr;
    	}
    	$middle = floor(($left + $right)/2);
    	$arr = mergeSort($arr, $left, $middle);
    	$arr = mergeSort($arr, $middle+1, $right);
    	$arr = merge($arr, $left, $middle, $right);
    
    	return $arr;
    }
    
    function merge($arr, $left, $middle, $right) {
    	$len = ($right + 1 - $left);
    	$l = $left;
    	$r = $middle + 1;
    	$a = $arr;
    	for($i = 0; $i < $len; $i++) {
    		if($l > $middle) {
    			$a[$i+$left] = $arr[$r];
    			$r++;
    		}elseif ($r > $right) {
    			$a[$i+$left] = $arr[$l];
    			$l++;
    		}elseif ($arr[$l] < $arr[$r]) {
    			$a[$i+$left] = $arr[$l];
    			$l++;
    		}else {
    			$a[$i+$left] = $arr[$r];
    			$r++;
    		}
    	}
    
    	return $a;
    }
    
    
    $arr = [12,33,5,23,3,5,6,7,3,1];
    $arr = mergeSort($arr, 0, 9);
    for($i=0;$i<10;$i++) {
    	echo $arr[$i];
    	echo " ";
    }
    

      额,第二种算法的c版

    #include <stdio.h>
    #include <stdlib.h>
    
    void mergeSort(int arr[], int left, int right);
    void merge(int arr[], int left, int middle, int right);
    
    int main()
    {
    	const int LEN = 12;
    	int arr[LEN];
    	int i = 0;
    	for(i=0;i<LEN;i++) {
    		scanf("%d", &arr[i]);
    	}
    	mergeSort(arr, 0, LEN-1);
    	
    
    	for(i=0;i<LEN;i++) {
    		printf("%d ", arr[i]);
    	}
    	printf("
    ");
    } 
    
    void mergeSort(int arr[], int left, int right)
    {
    	if(left >= right) {
    		return;
    	}
    	int middle = (left + right)/2;
    	mergeSort(arr, left, middle);
    	mergeSort(arr, middle+1, right);
    	merge(arr, left, middle, right);
    }
    
    void merge(int arr[], int left, int middle, int right)
    {
    	int len = right - left + 1;
    	int right_start = middle + 1;
    	int left_start = left;
    	int arr_new[len];
    	
    	int i = 0;
    	for(i=0; i<len; i++) {
    		arr_new[i] = arr[left+i];
    	}
    	
    	for(i=0; i< len; i++) {
    		if(left_start > middle) {
    			arr_new[i] = arr[right_start];
    			
    			right_start += 1;
    		}else if(right_start > right) {
    			arr_new[i] = arr[left_start];
    			
    			left_start += 1;
    		}else if(arr[left_start] < arr[right_start]) {
    			arr_new[i] = arr[left_start];
    			
    			left_start += 1;
    		}else {
    			arr_new[i] = arr[right_start];
    			
    			right_start += 1;
    		}
    	}
    	
    	for(i=0; i<len; i++) {
    		arr[left+i] = arr_new[i];
    	}
    

      

  • 相关阅读:
    php 基础------数组过滤
    js或者jq 使用cookie 时在谷歌浏览器不好使
    css3 -阻止元素成为鼠标事件目标 pointer-events
    CSS3-----transform 转换
    css3---过渡
    css3动画----animation
    移动端尺寸适配--媒体查询
    工作一年总结
    关于Jquery.Data()和HTML标签的data-*属性
    android shape
  • 原文地址:https://www.cnblogs.com/buerr/p/7308534.html
Copyright © 2011-2022 走看看