标签:efi return vector 总结 拆分 练习 art dex ios
二分查找:有序数组按照二分方式来查找数据
递归方法:
//递归方式: 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 \n", 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("\n");
}
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;
}
标签:efi return vector 总结 拆分 练习 art dex ios
原文地址:https://www.cnblogs.com/Whgy/p/12287014.html