排序算法---归并排序

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值