编写一个函数,把整数序列分成两个部分,使得左边部分都不大于右边部分,不需要排序。 ( 考察的是快速排序的部分)
#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;
}