编辑代码

#include <stdio.h>
#include <stdlib.h>
void Copy(int a[],int b[],int len,int state){
	if(state==1){
		for(int i=0;i<len;i++){
			b[i+1]=a[i];
		}
	}
	else if(state==2){
		for(int i=0;i<len;i++){
			a[i]=b[i+1];
		}
	}
	else{
		for(int i=0;i<len;i++){
			a[i]=b[i];
		}
	}
}

//排序
void Sort(int array[],int index[],int len){
	for(int i=0;i<len-1;i++){
		for(int j=len-1;j>i;j--){
			if(array[j-1]>array[j]){
				int temp=array[j];
				array[j]=array[j-1];
				array[j-1]=temp;
				temp=index[j];
				index[j]=index[j+1];
				index[j-1]= temp; 
			}
		}
	}
} 

//折半查找 
int Find(int array[],int len,int target){
	int high=len-1;
	int low=0;
	int min=(low+high)/2;
	int index=-1;
	while(low<=high){
		if(low==high){
                index=low;
                break;
            }
            min=(low+high/2)<high?(low+high/2):high;
            index=min;
            if(array[min]==target){
                break;
            }
            else if(array[min]<target){
                index=(min+1)+high/2;
                low=min+1;
            }
            else if(array[min]>target){
                index=low+(min-1)/2;
                high=min-1;
            }
	}
	return index;
	
}

int FindInArray(int arr[],int len,int target){
	//拷贝数组
	int a[len]; //原数组备份 
	int index[len]; //下标数组 
	Copy(a,arr,len,3);
	for(int i=0;i<len;i++){
		index[i]=i;
	}
	Sort(a,index,len); //堆排序 
	int result=Find(a,len,target);
	return index[result];
}

int main(){
	int a[]={85, 63, 52, 34, 25, 17, 6};
	int index=FindInArray(a,sizeof(a)/sizeof(int),6);
	printf("所在的下标是:%d",index); 
	return 0;
}