[算法] 归并排序 – 合并排序
合并排序算法 (合并排序) 一个排序算法或使用. 几乎相同的 快速排序算法 (快速排序) 通过把原数组的安排 2 一半, 但与快速排序元素作为之间的合并排序具有里程碑意义的比较,仍然明显地分为, 然后排序每个阵列 “混合” 2 重排阵.
这里是该算法的C语言代码:
#include <stdio.h>
/* xuat mang a tu vi tri l (left) den vi tri r (right)*/
void xuat(int a[], int l, int r) {
int i;
for (i = l; i <= r; i++){
printf("%d \t", a[i]);
}
printf("\n");
}
/* tron 2 mang
* mang a[l -> m] da sap xep
* mang a[m+1 -> r] da sap xep
* */
void tron(int a[], int l, int m, int r){
int i, length;
int l_end = m - 1;
i = l;
length = r - l;
int temp[length];
/* tron cac phan tu cua 2 mang con cua a*/
while(l <= l_end && m <= r) {
if (a[l] <= a[m]) {
temp[i++] = a[l++];
} else {
temp[i++] = a[m++];
}
}
/* Neu mang dau tien chua het */
while(l <= l_end) {
temp[i++] = a[l++];
}
/* Neu mang thu 2 chua het*/
while(m <= r) {
temp[i++] = a[m++];
}
for (i = 0; i <= length; i++, r--) {
a[r] = temp[r];
}
}
/* thuat toan sap xep tron*/
void sx_tron(int a[], int l, int r) {
//xuat(a, l, r);
int m;
if(l < r) {
m = (l + r) / 2;
sx_tron(a, l, m);
sx_tron(a, m + 1, r);
tron(a, l, m + 1, r);
}
}
int main(){
int n = 5;
int a[] = {2, 6, 3, 8, 5};
sx_tron(a, 0, n-1);
xuat(a, 0, n - 1);
return 0;
}



欢迎,
我不是太熟悉的通道:
INT温度[长度];
和相关的临时场所. 可以进一步解释的目的和意义的是不?
非常感谢!
INT温度[长度];
是创建一个数组名为temp的材料,长度长,你. 和下面的温度, 如温度[我 ] 意味着在阵列温度的第i个位置获得的值+ +.
谢谢. 你说得对,他添
当 n 时,算法失败 >= 12.
谢谢, 我会再检查一次.