將兩個升序數組歸併爲一個大的升序數組:
#include <stdio.h>
#include <stdlib.h>
//順序表歸併
void mergearray(int a[],int lengtha,int b[],int lengthb,int c[]){
int k=0;
int i=0,j=0;
while(i<lengtha&&j<lengthb){
if(a[i]<b[j]){
c[k++]=a[i++];
}else{
c[k++]=b[j++];
}
}
while(i<lengtha){
c[k++]=a[i++];
}
while(j<lengthb){
c[k++]=b[j++];
}
}
void PrintArray(int c[],int length){
for(int i=0;i<length;i++){
printf("%d ",c[i]);
}
}
int main(){
int a[]={1,3,5,7,9};
int b[]={2,4,6,8};
int c[9];
mergearray(a,5,b,4,c);
PrintArray(c,9);
}
代碼運行效果圖:
將兩個升序鏈表歸併爲一個升序鏈表:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//尾插法建立單鏈表
LinkList List_TailInsert(LinkList &L){
//從表頭到表尾正向建立單鏈表,每次均在表尾插入元素
int x;
L=(LNode *)malloc(sizeof(LNode));
LNode *s;
LNode *r=L;//r爲表尾指針
scanf("%d",&x);//輸入結點的值
while(x!=9999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);//只要輸入不結束,就繼續創建新節點
}
r->next=NULL;//尾指針置空
return L;
}
//輸出表
int PrintList(LinkList L){
LNode *p=L;
//printf("%d->",p->data);
while(p->next!=NULL){
p=p->next;
printf("%d->",p->data);
}
printf("\n");
return 0;
}
void MergeList(LinkList l1,LinkList l2,LinkList &l3){
LinkList p =l1->next;
LinkList q=l2->next;
l3=l1;
l3->next=NULL;
LinkList r=l3;
while(p!=NULL&&q!=NULL){
if(p->data<q->data){
r->next=p;
p=p->next;
}else{
r->next=q;
q=q->next;
}
r=r->next;
}
if(p!=NULL){
r->next=p;
}
if(q!=NULL){
r->next=q;
}
}
int main(){
LinkList l1;
printf("建立單鏈表1,請輸入一組升序數據,輸入9999結束輸入\n");
List_TailInsert(l1);//頭插法
PrintList(l1);//輸出表
LinkList l2;
printf("建立單鏈表2,請輸入一組升序數據,輸入9999結束輸入\n");
List_TailInsert(l2);//頭插法
PrintList(l2);//輸出表
LinkList l3;
MergeList(l1,l2,l3);
PrintList(l3);
}
運行效果圖:
劃分數組:在一個數組中選一個樞軸元素,比樞軸元素大的放在樞軸元素左面,比樞軸元素小的放在樞軸元素右面
實現代碼:
#include<stdio.h>
void partition(int a[],int n){
int i=0;
int temp=a[i];
int j=n-1;
while(i<j){
while(i<j&&a[j]>temp) j--;
if(i<j){
a[i]=a[j];
i++;
}
while(i<j&&a[i]<temp) i++;
if(i<j){
a[j]=a[i];
j--;
}
}
a[i]=temp;
}
void PrintArray(int c[],int length){
for(int i=0;i<length;i++){
printf("%d ",c[i]);
}
}
int main(){
int a[]={2,1,3,-2,-4,5,9,10};
partition(a,8);
PrintArray(a,8);
}
運行代碼截圖: