user-0 提问: c语言合并排序算法

回复:
user: user-1
content: 未找到merge的定义，需要在main函数之前声明一下，或者将merge函数声明放在一个自定义头文件里，然后再main函数所在源文件引入一下，（include）

user: user-2
content: 各种排序算法动画演示http://www.webhek.com/misc/comparison-sort/

user: user-3
content: 引用 7 楼 zh19921107 的回复:#include <stdlib.h> #include <stdio.h>  // 声明应该放到函数调用处之前，其实头文件中也就是包含的声明 void merge_sort(int A[], int n); void merge(int array[], int lo, int mid, int hi);  void main() {     int A[] = { 8,5,3,9,11,6,4,1,10,7,2 };     int length;     length = sizeof(A) / sizeof(A[0]);     printf("排序前的数组为：\n");     for (int i = 0;i <length;i++)     {         printf("%d ", A[i]);     }     printf("\n");      merge_sort(A, length);     printf("排序后的数组为：\n");     for (int j = 0;j < length;j++)     {         printf("%d ", A[j]);     }     printf("\n"); }  void merge_sort(int A[], int n) {     int i, s, t = 1;     while (t < n)     {         s = t;t = 2 * s;i = 0;         while (i + t < n)         {             // 此处的merge函数没有找到定义             merge(A, i, i + s - 1, i + t - 1);             i = i + t;         }         if (i + s < n)         {             // 此处的merge函数没有找到定义             merge(A, i, i + s - 1, n - 1);         }     } }  void merge(int array[], int lo, int mid, int hi) {     // 辅助数组     static int aux[100] = {0};     int i = lo, j = mid + 1;     //把元素拷贝到辅助数组中     for (int k = lo; k <= hi; k++)     {         aux[k] = array[k];     }     //然后按照规则将数据从辅助数组中拷贝回原始的array中     for (int k = lo; k <= hi; k++)     {         //如果左边元素没了， 直接将右边的剩余元素都合并到到原数组中         if (i > mid)         {             array[k] = aux[j++];         }//如果右边元素没有了，直接将所有左边剩余元素都合并到原数组中         else if (j > hi)         {             array[k] = aux[i++];         }//如果左边比右边小，则将左边的元素拷贝到原数组中         else if (aux[i]<(aux[j]))         {             array[k] = aux[i++];         }         else         {             array[k] = aux[j++];         }     } }  修改了代码 ： 1.添加头文件<stdio.h> 2.函数声明放到头文件后 3.网上找来一个merge函数加入，参考http://www.cnblogs.com/yangecnu/p/Introduce-Merge-Sort.html  忘了贴结果： 排序前的数组为： 8 5 3 9 11 6 4 1 10 7 2 排序后的数组为： 1 2 3 4 5 6 7 8 9 10 11

user: user-3
content: #include <stdlib.h> #include <stdio.h>  // 声明应该放到函数调用处之前，其实头文件中也就是包含的声明 void merge_sort(int A[], int n); void merge(int array[], int lo, int mid, int hi);  void main() {     int A[] = { 8,5,3,9,11,6,4,1,10,7,2 };     int length;     length = sizeof(A) / sizeof(A[0]);     printf("排序前的数组为：\n");     for (int i = 0;i <length;i++)     {         printf("%d ", A[i]);     }     printf("\n");      merge_sort(A, length);     printf("排序后的数组为：\n");     for (int j = 0;j < length;j++)     {         printf("%d ", A[j]);     }     printf("\n"); }  void merge_sort(int A[], int n) {     int i, s, t = 1;     while (t < n)     {         s = t;t = 2 * s;i = 0;         while (i + t < n)         {             // 此处的merge函数没有找到定义             merge(A, i, i + s - 1, i + t - 1);             i = i + t;         }         if (i + s < n)         {             // 此处的merge函数没有找到定义             merge(A, i, i + s - 1, n - 1);         }     } }  void merge(int array[], int lo, int mid, int hi) {     // 辅助数组     static int aux[100] = {0};     int i = lo, j = mid + 1;     //把元素拷贝到辅助数组中     for (int k = lo; k <= hi; k++)     {         aux[k] = array[k];     }     //然后按照规则将数据从辅助数组中拷贝回原始的array中     for (int k = lo; k <= hi; k++)     {         //如果左边元素没了， 直接将右边的剩余元素都合并到到原数组中         if (i > mid)         {             array[k] = aux[j++];         }//如果右边元素没有了，直接将所有左边剩余元素都合并到原数组中         else if (j > hi)         {             array[k] = aux[i++];         }//如果左边比右边小，则将左边的元素拷贝到原数组中         else if (aux[i]<(aux[j]))         {             array[k] = aux[i++];         }         else         {             array[k] = aux[j++];         }     } }  修改了代码 ： 1.添加头文件<stdio.h> 2.函数声明放到头文件后 3.网上找来一个merge函数加入，参考http://www.cnblogs.com/yangecnu/p/Introduce-Merge-Sort.html

user: user-4
content: main函数最好写在整个函数的最后面，不然就要在函数里声明要调用的函数，

user: user-5
content: 函数声明是在main之前，，，

user: user-6
content: void merge_sort(int A[], int n); 应该在main（）函数前，本人初学者，声明在函数前才会在该函数调用时找到调用的函数

user: user-7
content: c语言的合并排序算法应该是一个递归函数：这里参数s和e代表将数组a［］从下标s到下标e进行排序。 void MergeSort(int a[],int s,int e,int tmp[])  { if( s < e)  { int m = s + (e-s)/2;  MergeSort(a,s,m,tmp);  MergeSort(a,m+1,e,tmp);  Merge(a,s,m,e,tmp); }  } 将一个数组进行对半分，不停的继续下去，直到数组里面的元素个数是1，然后再合并成2个元素数组，4个元素数组，直到将原来的数组整个进行排序。 PS：记得给分啊。