王道データ構造手順表練習コードの実現


p 19王道データ構造手順表の練習問題

#include 

int test1(int *a,int len){
	int p = -1;//         
	int value = a[0];//        
	for(int i=1;i<len;i++){
		if(a[i]<value){
			value = a[i]; p = i;
		}
	}
	a[p] = a[len-1]; 
	return value;
	
}

void test2(int *a,int len){
    //    
    int i=0;int j = len-1;
    while(i<j){
        int t = a[i];
        a[i] = a[j];
        a[j] = t;
        i++;j--;
    }
}

void test3(int *a,int len,int x){
    int j = 0;
    for(int i=0;i<len;i++){
        if(a[i]!=x) a[j++] = a[i];
    }
    printf("%d",j);
    printa(a,j);
}

void test4(int *b,int len,int s,int t){
    if(s>=t||len==0) {printf("  ");return;}
    //         s   
    int i = 0,j = 0;
    for(;i<len;i++){
        if(b[i]>=s) break; 
    }
    for(;j<len;j++){
        if(b[j]>t) break;
    }
    for(;j<len;j++,i++){
        b[i] = b[j]; 
    }
    len = i;
    printa(b,len);
}
void test5(int *b,int len,int s,int t){
    int j=0;
    for(int i=0;i<len;i++){
        if(!(s<=b[i]&&b[i]<=t)){
            b[j++] = b[i];
        }
    }
    printa(b,j);
}

void test6(int *b,int len){
    int i=0;
    for(int j=1;j<len;j++){
        if(b[j]!=b[i]) b[++i] = b[j];
    }
    printa(b,i);
}

void test7(int *a,int *b,int lena,int lenb){
    //a b    
    int s[lena+lenb-1];
    int i=0,j=0;int p = 0;
    while(i<lena&&j<lenb){
        if(a[i]<=b[j])  s[p++] = a[i++];
        else s[p++] = b[j++];
    
    }
    while(i<lena) s[p++] = a[i++];
    while(j<lenb) s[p++] = b[j++];
    printa(s,p);
}

void test8(int *b,int l,int r){
    //l-r     
    int i = l;int j = r;
    while(i<j){
        int t = b[i];
        b[i] = b[j];
        b[j] = t;
        i++;j--;
    }
}
void test9(int * a,int len,int x){
    int l = 0;int r = len-1;
    while(l<r){
        int mid = (l + r) /2;
        if(a[mid]>=x) r = mid;
        else l = mid + 1;
    }
    //     
}
//2010                 test8 reverse       
void test10(int *a,int len,int p){//p    
    test8(a,0,p-1);
    test8(a,p,len-1);
    test8(a,0,len-1);
    printa(a,len);
}
int main()
{
	int a [] = {1,2,3,4,5,6,10,64};
    int b [] = {1,2,3,4,5,6,10,20,30};
    test10(a,8,3);
}

void printa(int *a,int len){
    printf("
"
); for(int i=0;i<len;i++){ printf("%d ",a[i]); } }
未完…