9、C程序 数组排序之[归并排序]

来源:互联网 发布:js eval函数 json 编辑:程序博客网 时间:2024/06/05 17:35
#include <stdio.h>// 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}// 打印数组void printA (int *a, int len){int i;for (i = 0; i < len; i++){printf ("%4d", a[i]);}printf ("\n");}// a 是数组  tmp  是缓冲区void merge(int *a, int left, int mid, int right, int *tmp){int i = left;int j = mid + 1;int k = 0;while (i <= mid && j <= right){if (a[i] > a[j])tmp[k++] = a[j++];elsetmp[k++] = a[i++];}while (i <= mid)tmp[k++] = a[i++];while (j <= right)tmp[k++] = a[j++];k = 0;for (i = left; i <= right; i++){a[i] = tmp[k++];}}void mergeSort(int *a, int left, int right, int *tmp){if (left >= right)return;int mid = (left + right)/2;mergeSort (a, left, mid, tmp);    // 对左边部分进行归并排序mergeSort (a, mid+1, right, tmp); // 对右边部分进行归并排序merge (a, left, mid, right, tmp); // 将将部分数据进行归并}int main(){int a[10] = {9,6,8,0,3,1,2,4,7,5};int len = sizeof(a) / sizeof(a[0]);int tmp[10];mergeSort (a, 0, len-1, tmp);printA (a, len);return 0;}