排序算法---归并排序

1.归并排序

 1 void merge(int *arr, int start, int mid, int end)
 2 {
 3     int i = start;
 4     int j = mid + 1;
 5     int k = 0;
 6     int len = end - start + 1;
 7     int *temp = new int[len];
 8     
 9     while(i <= mid && j <= end)
10     {
11         if(arr[i] < arr[j])
12         {
13             temp[k] = arr[i];
14             k++;
15             i++;
16         }
17         else
18         {
19             temp[k] = arr[j];
20             k++;
21             j++;
22         }
23     }
24     
25     while(i <= mid)
26     {
27         temp[k] = arr[i];
28         k++;
29         i++;
30     }
31     
32     while(j <= end)
33     {
34         temp[k] = arr[j];
35         k++;
36         j++;
37     }
38     
39     for(k = 0; k < len; k++)
40     {
41         arr[start + k] = temp[k];
42     }
43 }
44 
45 void _mergeSort(int *arr, int start, int end)
46 {
47     if(start == end)
48     {
49         return;
50     }
51     
52     int mid = (start + end ) / 2;
53     _mergeSort(arr, start, mid);
54     _mergeSort(arr, mid + 1, end);
55     merge(arr, start, mid, end);
56 }
57 
58 void mergeSort(int *arr, int n)
59 {
60     _mergeSort(arr, 0, n - 1);
61 }
原文地址:https://www.cnblogs.com/chusiyong/p/11320096.html