void MergeSort(int elem[],int n){ int *p=new int[n]; Help(elem,p,0,n-1); delete[] p; }
时间: 2023-06-27 19:06:38 浏览: 78
这是一个归并排序的实现,函数名为 MergeSort,接受两个参数,一个是待排序的数组 elem,另一个是数组的长度 n。
在函数内部,首先申请了一个长度为 n 的临时数组 p,用来辅助归并排序。然后调用 Help 函数进行排序,该函数接受四个参数:待排序数组 elem,临时数组 p,当前排序区间的起始下标 left 和结束下标 right。在 Help 函数内部,首先判断区间长度是否为 1,如果是直接返回;否则将区间一分为二,递归地对左右两个子区间进行排序,最后将左右两个有序区间归并成一个有序区间。
最后在 MergeSort 函数结束前,释放了申请的临时数组 p 的内存。
相关问题
用C语言根据void MergeSort(int* a, int begin, int end, int* temp)写出归并排序函数
void MergeSort(int* a, int begin, int end, int* temp) {
if (begin >= end) return;
int mid = (begin + end) / 2;
MergeSort(a, begin, mid, temp);
MergeSort(a, mid + 1, end, temp);
int i = begin, j = mid + 1, k = 0;
while (i <= mid && j <= end) {
if (a[i] <= a[j]) {
temp[k++] = a[i++];
} else {
temp[k++] = a[j++];
}
}
while (i <= mid) temp[k++] = a[i++];
while (j <= end) temp[k++] = a[j++];
for (i = 0; i < k; i++) {
a[begin + i] = temp[i];
}
}
#define OK 1 #define ERROR 0 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef int status; typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; //采用有序插入法建立一个带附加表头节点且长度为n的有序(升序)单链表L void CreateList(LinkList &L,int n){ int i; LNode *p,*q,*s; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; for(i=0;i<n;++i){ s=(LinkList)malloc(sizeof(LNode)); printf("请输入第%d个节点值:",i+1); scanf("%d",&s->data); p=L; q=L->next; while(_____1_____){//定位指针q指向插入点 _____2_____);//p为q的直接前驱 q=q->next; } _____3______;//插入新节点 p->next=s; } }//CreateList void Mergesort(LinkList &A,LinkList &B,LinkList &C){ LNode *pa,*pb,*pc; pa=A->next; pb=B->next; C=pc=A; while(pa && pb){ if(pa->data<=pb->data){ _____4______; _____5______; _____6______; } else { _____7______; _____8______; _____9______; } } pc->next=pa?pa:pb; free(B); }//Mergesort void OutputList(LinkList L) { LinkList p=L->Next; while(_____10_______){ printf("%d->",p->data); p=p->next; } printf("\n"); }
空缺处应填写的代码如下:
1. q->next!=NULL && q->data<s->data
2. p=q
3. s->next=q
4. pc->next=pa
5. pa=pa->next
6. pc=pc->next
7. pc->next=pb
8. pb=pb->next
9. pc=pc->next
10. p!=NULL
阅读全文