本文目錄一覽:
- 1、C語言 歸併排序的完整代碼
- 2、c語言歸併排序簡單問題
- 3、c語言的歸併排序
- 4、C語言歸併排序代碼
C語言 歸併排序的完整代碼
#include stdio.h
int main()
{int a[]={1,3,5,7,9},b[]={2,4,6,8},c[10];
int i,j,k,n1,n2,n3;
i=j=k=0;
n1=5;
n2=4;
n3=n1+n2;
for(;in1jn2;)
if(a[i]b[j])c[k++]=a[i++];
else c[k++]=b[j++];
for(;in1;)c[k++]=a[i++];
for(;jn2;)c[k++]=b[j++];
for(k=0;kn3;k++)
printf(“%d “,c[k]);
printf(“\n”);
return 0;
}
c語言歸併排序簡單問題
當調用Merge_SortDC(1,8);時,
Merge_SortDC(1,4); 與Merge_SortDC(4+1,8); 都執行成功返回以後
兩邊的數組都是有序的了,這時候,執行Merge(low,mid,high),也就是Merge(1,4,8)。
至於Merge_SortDC(1,4); 與Merge_SortDC(4+1,8)各自的執行順序,也跟Merge_SortDC(1,8);是類似的,可以類推。
遞歸就是先遞推調用到最後,然後再一層層返回來。
c語言的歸併排序
、歸併簡單點說就是2分法 一直除以2 然後把從0到N/2的下標 , 和 N/2+1 到N的地址傳送到合併函數裡面,遞歸調用
C語言歸併排序代碼
void mergeSort(int a[],int left,int right)
{
int i;
// 保證至少有兩個元素
if(left right)
{
i = (left+right)/2;
mergeSort(a,left,i);
mergeSort(a,i+1,right);
merge(a,left,right);
}
}
void merge(int a[],int left,int right)
{
int begin1 = left;
int mid = (left+right)/2 ;
int begin2 = mid+1;
int k=0;
int newArrayLen = right-left+1;
int *b = (int*)malloc(newArrayLen*sizeof(int));
while(begin1=mid begin2=right)
{
if(a[begin1]=a[begin2])
b[k++] = a[begin1++];
else
b[k++] = a[begin2++];
}
while(begin1=mid)
b[k++] = a[begin1++];
while(begin2=right)
b[k++] = a[begin2++];
copyArray(b,a,newArrayLen,left);
free(b);
}
/**
* 複製數組
* source:源數組
* dest:目標數組
* len:源數組長度
* first:目標數組起始位置
*
*/
void copyArray(int source[], int dest[],int len,int first)
{
int i;
int j=first;
for(i=0;ilen;i++)
{
dest[j] = source[i];
j++;
}
}
void mergeSortTest()
{
int a[] = {5, 18, 151, 138, 160, 63, 174, 169, 79, 200};
int len = sizeof(a)/sizeof(int);
showArray(a,len);
mergeSort(a,0,len-1);
showArray(a,len);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/236019.html