小标
2018-10-10
来源 :
阅读 1608
评论 0
摘要:本文主要向大家介绍C/C++知识点之[C语言] 归并排序的特性及实现了,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍C/C++知识点之[C语言] 归并排序的特性及实现了,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
1、算法特性
归并排序是一种高效且稳定的排序方法,其速度仅次于快速排序,但比较占用内存。
其时间复杂度最好、最差、平均情况均为O(nlog(2)n),空间复杂度为O(n)。
2、算法思路
采用分治法的思路将问题分解、细化、逐个解决,即通过递归将无序序列不断分解,直到分解成序列有序(当序列长度为1时一定有序)。再将分解的有序序列不断合并成新的有序序列,最后合并成一个有序序列。
3、实现代码
1 #include
2 #include
3
4 // 归并排序:arr [left,mid]区间升序 [mid+1,rigth]升序 合并这个数组的数据使之升序
5 void merge(int arr[],int left,int mid,int rigth)
6 {
7 int len = mid-left+1;
8 int* p = malloc(sizeof(int)*len);
9 // 把[left,mid-1]区间的数据移动到p指向的内存
10 // memcpy(prr,arr+left,l1*sizeof(int));
11 for(int i=0; i<len; i++)
12 {
13 p[i] = arr[left+i];
14 }
15 // 把p[0,len-1] arr[mid,rigth]两部分数据合并到 arr[left,rigth]数组里
16 int i = 0;
17 int j = mid+1;
18 int k = left; // 从left开始放
19 while(i<len && j<=rigth)
20 {
21 if(p[i] < arr[j])
22 {
23 arr[k++] = p[i++];
24 }
25 else
26 {
27 arr[k++] = arr[j++];
28 }
29 }
30 while(i < len)
31 {
32 arr[k++] = p[i++];
33 }
34 }
35
36 // 通铺使arr left-rigth区间有序
37 void _merge_sort(int arr[],int left,int rigth)
38 {
39 if(left >= rigth) // 只有一个数据 那本来就有序
40 {
41 return;
42 }
43 int mid = (left+rigth)/2;
44 // left mid mid+1 rigth
45 if(mid > left)
46 {
47 _merge_sort(arr,left,mid); // 让数组 [left,mid]有序
48 }
49 if(rigth > mid+1)
50 {
51 _merge_sort(arr,mid+1,rigth); // 让数组 [mid+1,rigth]有序
52 }
53 merge(arr,left,mid,rigth); // 合并
54 }
55
56 void merge_sort(int arr[],int len)
57 {
58 _merge_sort(arr,0,len-1);
59 }
60
61 void travel(int arr[],int len)
62 {
63 for(int i=0; i<len; i++)
64 {
65 printf("%d ",arr[i]);
66 }
67 printf("\n");
68 }
69
70 int main()
71 {
72 int arr[] = {53,82,9,233,43,14,55,9,4,67};
73 int len = sizeof(arr)/sizeof(arr[0]);
74
75 travel(arr,len);
76 merge_sort(arr,len);
77 travel(arr,len);
78
79 return 0;
80 }
4、测试结果
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号