c语言冒泡排序以后用折半查找
用冒泡法升序排列以后希望在原数组的基础上用折半 可是我这个把数组改变了 怎么办额! 求教了 #include<stdio.h> int main() #define N 10 { int arr[10]; int i,j,t,num,flat,mid; flat=0; for(i=0;i<10;i++) scanf("%d",&arr[i]); for(i=0;i<10;i++) for(j=0;j<10-i;j++) if(arr[j]>arr[j+1]) { t=arr[j]; arr[j]=arr[j+1]; arr[j+1]=t; } for(i=0;i<10;i++) printf("%d ",arr[i]); printf("\n"); printf("输入一个数 找找数组里面到底有木有:"); scanf("%d",&num); j=N,i=0; while(i<j) { mid=(i+j)/2; if(arr[mid]==num) { flat=1; break;} else if(arr[mid]>num) j=mid-1; else i=mid+1; } if(flat=1) printf("arr[%d]=%d\n",(i+j)/2,num); else printf("没介个数!"); return 0; }
折半查找的对象必须是有序数组,因此你只有在排序后才能使用折半查找 你的意思是不是想要原来的位置的索引?如果是,那就你再定义一个数组,保存调整后的数在老数组中的索引,查找后显示老数组索引的值就行了
楼主的程序没有问题。 只不过你在冒泡排序后,原有的位置-值映射被改变了。 如果你想要保存原来的映射,就按楼上的方法,新建一个数组,保存之。 ps:我看不成你要原来映射的意义何在。
答:谭浩强的C里有,而且有详解。。。详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>