• 《算法四》(二分排序+汉诺塔问题)


    二分查找:有序数组按照二分方式来查找数据
    递归方法:

    //递归方式: 
    	int mid = l + (r-l)/2;//中间 
    	if(l==r) return -1;//没有找到的情况 
    	
    	if(finddata==a[mid]) return mid;
    	if(finddata>a[mid]) return half_find(a, mid+1, r, finddata);
    	if(finddata<a[mid]) return half_find(a, l, mid, finddata);

    非递归方法:

    //非递归方式:
    	int mid;
    	int left = l;
    	int right = r;
    	while(left < right){
    		mid = left + (right-left)/2;
    		if(finddata == a[mid]) return mid;
    		if(finddata > a[mid]){
    			left = mid+1;
    		}else{
    			right = mid;
    		}
    	}
    	return -1;//没有找到的情况,此时left==right 

    递归练习之汉诺塔问题:

    #include<iostream>
    #include<vector>
    #include<string.h>
    int count=0;
    
    void han_nuo(int num, char A, char B, char C){
    	if(num<1) return;//num不符合实际的情况 
    	
    	han_nuo(num-1, A, C, B);
    	printf("%c-->%c 
    ", A, C);
    	han_nuo(num-1, B, A, C);
    	
    	count++;
    } 
    
    int main(){
    	han_nuo(10, 'a', 'b', 'c'); 
    	printf("一共移动%d次", count);
    	return 0;
    }

    二分查找与归并排序总结:
    都是分治思想
    二分:每次排除一半
    归并:拆分成为2个,递归的进行拆分直到都成为有序数组
    然后合并有序数组————>排序成功

    代码演示:

    #include<iostream>
    #include<vector>
    #include<string.h>
    #define NUM 10
    
    void print_art(int* a, int len){
    	for(int i=0; i<len; i++){
    		printf("%d ", a[i]);
    	}
    	printf("
    ");
    } 
    
    
    int half_find(int* a, int l, int r, int finddata){
    	/*
    	递归方式: 
    	int mid = l + (r-l)/2;//中间 
    	if(l==r) return -1;//没有找到的情况 
    	
    	if(finddata==a[mid]) return mid;
    	if(finddata>a[mid]) return half_find(a, mid+1, r, finddata);
    	if(finddata<a[mid]) return half_find(a, l, mid, finddata);
    	*/
    	
    	//非递归方式:
    	int mid;
    	int left = l;
    	int right = r;
    	while(left < right){
    		mid = left + (right-left)/2;
    		if(finddata == a[mid]) return mid;
    		if(finddata > a[mid]){
    			left = mid+1;
    		}else{
    			right = mid;
    		}
    	}
    	return -1;//没有找到的情况,此时left==right 
    }
    	  
    //二分查找 
    int halffind(int* a, int len, int finddata){
        return half_find(a, 0, len-1, finddata);
    } 
    	  
    	  
    int main(){
    	int a[NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    	int finddata = 66;
    	int index = halffind(a, NUM, finddata);
    	printf("%d下标:%d",finddata,index);
    	return 0;
    }
  • 相关阅读:
    delphi参数传递
    Delphi OO
    Delphi Excel
    Delphi Register
    西安前端交流会
    web前端开发教程系列-4
    web前端开发教程系列-3
    web前端开发教程系列-2
    web前端开发教程系列-1
    露个脸
  • 原文地址:https://www.cnblogs.com/Whgy/p/12287014.html
Copyright © 2020-2023  润新知