目录
1.双指针
while(i<j){
if(martix[i]+martix[j]==value){
printf("%d %d\n",i,j);
}else if(martix[i]+martix[j]<value){
i++;
}else{j--;
}
}
2.合并序列
int merge(int a[],int b[],int c[],int n,int m){
int i=j=index=0;
while(i<n&&j<m){
if(a[i]>b[j]) c[index++]=a[i++];
else c[index++]=b[j++];
}
while(i<n) c[index++]=a[i++];
while(j<m) c[index++]=b[j++];
return index;
}
3.归并排序(递归)
无线套娃,最后当left=right的时候到达递归边界,开始一层一层的合并排序
void merge(int martix[],int l1,int r1,int l2,int r2){
int i=l1,j=l2;
int temp[100],index=0;
while(i<=r1&&j<=r2){
if(martix[i]>martix[j]) temp[index++]=martix[i++];
else temp[index++]=martix[j++];
}
while(i<=r1) temp[index++]=martix[i++];
while(j<=r2) temp[index++]=martix[j++];
for(int x=0;x<index;x++){
martix[l1+x]=temp[x];
}
}
void mergesort(int martix[],int left,int right){
if(left!=right){
int mid=(left+right)/2;
mergesort(martix,left,mid);
mergesort(martix,mid+1,right);
merge(martix,left,mid,mid+1,right);
}
}
4.归并排序(迭代)
void mergesort(int martix[]){
for(int step=2;step/2<=n;step*=2){
for(int i=1;i<=n;i+=step){
int mid=i+step/2-1;
if(!mid>=n){
merge(martix,i,mid,mid+1,min(i+step-1,n))
}
}
}
}