C程序设计

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
编写一个函数,把整数序列分成两个部分,使得左边部分都不大于右边部分,不需要排序。 ( 考察的是快速排序的部分)

#include<stdio.h>
int  yitang(int left,int right,int arr[]){
	int a=arr[left];
	while(left<right){
			while(left<right&&arr[right]>a)right--;
			arr[left]=arr[right];			
			while(left<right&&arr[left]<a)left++;
			arr[right]=arr[left];
		}
	arr[left]=a;
	return left;
}
int partion(int arr[],int n){
	int left=0,right=n;
	int k=n/2;
	int kk;
	do{
		kk=yitang(left,right,arr);
		if(k==kk) return 0;
		else if(k<kk){right=(kk-1);}
		else {left=kk+1;}
	}while(1);	
}
void  show(int arr[],int n){
	int i;
	for(i=0;i<n;i++){
	printf("%d  ",arr[i]);
	}
}
int main(){
	int arr[]={50,22,3,44,55,6,77,8,0,99,1};
	printf("原序列\n");
	show(arr,11);
	partion(arr,10);
	printf("\n调整后\n");
	show(arr,11);
	
}

有两个整数数组A和B,它们分别有m、n个整数。并且都是按非递减序列,现将B数组插入A数组中,使得A数组中各元素不大于B数组中各元素,且还是非递减序列

#include<stdio.h>
#define MAX 100
void insert(int A[],int B[],int *m, int *n)
{
	int i,j,k=*m-1;
	for(i=0;B[i]<A[k];i++,k++){
		for(j=k;A[j]>B[i];j--){
			A[j+1]=A[j];
		}
		A[j+1]=B[i];
	}
	for(j=0;i<*n;i++,j++){
		B[j]=B[i];
	}
	*n=j;
	*m=k+1;
}
void  show(int arr[],int n){
	int i;
	for(i=0;i<n;i++){
		if(i==n-1)
			printf("%d\n",arr[i]);
		else printf("%d  ",arr[i]);
	}
}

int main(){
	int arrA[MAX]={ 0,5,9};
	int m=3;
	int arrB[MAX]={3,4,6,7,10,12,13,20};
	int n=8;
	printf("arrA:\n");
	show(arrA,m);
	printf("arrB:\n");
	show(arrB,n);

	insert(arrA,arrB,&m,&n);
	printf("-----*---*---*----*----*---*-----\n");
	printf("arrA:\n");
	show(arrA,m);
	printf("arrB:\n");
	show(arrB,n);
	return 0;
}

对多个字符串进行字典排序

#include<stdio.h>
#include<string.h>
void Sort(char *parr[],int n){
	int i,j;
	char *temp;
	for(i=0;i<n-1;i++){
		for(j=n-1;j>i;j--){
			if(strcmp(parr[j-1],parr[j])>0){
				temp=parr[j-1];
				parr[j-1]=parr[j];
				parr[j]=temp;
			}
		}
	}
}
int main(){
	char *chs[4]={"ababab","aaabd","bbbb","aaaa"};
	int i;
	printf("排序前:\n");
	for(i=0;i<4;i++){
		puts(chs[i]);
	}
	Sort(chs,4);
	printf("排序后:\n");
	for(i=0;i<4;i++){
		puts(chs[i]);
	}
	return 0;
} 

编写一个函数,使之能完成以下功能:利用递归方法找出一个数组中的最大值和最小值,要求递归调用函数的格式如下:MinMaxValue(arr,n,&max,&min),其中arr是给定的数组,n是数组的个数,max、min分别是最大值和最小值

#include<stdio.h>
void MinMaxValue(int arr[],int n,int *max,int *min){
		if(n==0) return;
		if(arr[n-1]>*max)*max=arr[n-1];
		if(arr[n-1]<*min)*min=arr[n-1];
		MinMaxValue(arr,n-1,max,min);
}
int main(){
	int arr[]={5,7,6,11,2,9};
	int max=arr[0],min=arr[0];
	MinMaxValue(arr,6,&max,&min);//sizeof(arr)/sizeof(int)
	printf("max=%d\nmin=%d\n",max,min);
	return 0;
}

有两字符数组s和t,求t在s中出现第一次的开始位置,如果没有则输出“No”,有则输出开始位置

#include<stdio.h>
int start(char s[],char t[])
{
	char *p,*p2;
	char *q;
	int result=0;
	for(p=s;*p!='\0';p++){
		for(q=t,p2=p;*p2==*q&&*q!='\0'&&*p2!='\0';p2++,q++);
		if(*q=='\0')return p-s;
	}
	return -1;

} 

int main(){
	char chs[]="ababdbf";
	char chs2[]="dbf";
	int result;
	result=start(chs,chs2);
	if(result==-1)printf("NO\n");
	else printf("start=%d\n",result);
	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值