归并排序--c语言实现
来源:互联网 发布:nginx只允许访问index 编辑:程序博客网 时间:2024/06/05 19:53
------c语言实现归并排序------------------
归并排序采用递归二分的方法,把数组递归分割成两块,然后自底向上,对分割的小数组两两进行合并排序,因为每次合并的
两个数组都已经拍好顺序,所以其具有较低的时间开销。
例如:
原数组 arr[8] = {1,2,6,5,8,0,9,4}
在递归分割后:
{1},{2},{6},{5},{8},{0},{9},{4}
然后自底向上合并
第一次合并:
{1,2} {5,6} {0,8},{4,9}
第二次合并
{1,2,5,6} {0,4,8,9}
第三次合并
{0,1,2,4,5,6,8,9}
基本上就是采用这样的方法进行合并的最终得到排序结果排序。
由于归并排序采用二分的思想,所以其复杂与(lgn有关),下面给出其复杂度。
排序方法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度稳定性复杂性归并排序O(nlgn)O(nlgn)O(nlgn)O(n)稳定较复杂
最后,给出c语言实现的归并排序算法(gcc编译器)
#include <stdio.h>#include <stdlib.h>/*数组大小*/#define SIZE 12/*合并两个已经排好顺序的数组*/void Merge(int *arr,int start,int mid,int end,int *temp){ int i=start,j=mid+1,k=0; //start到mid为数组1,mid+1到end为数组2 while((i<=mid)&&(j<=end)){ /*从两个数组最低位开始比较,数值小的存入临时数组。*/ temp[k++] = (arr[i] <= arr[j]) ? arr[i++]:arr[j++]; } /*总有一个数组先比较完,所以处理剩下数组的元素*/ while(i<=mid){ temp[k++]=arr[i++]; } while(j<=end){ temp[k++]=arr[j++]; } k=0; /*将排序完的临时数组拷贝到原数组.*/ for(i=start;i<=end;i++){ arr[i]=temp[k++]; }}/*用分治法进行二路归并*/void merge_sort(int *arr,int start,int end,int *temp){ /*当数组至少有两个元素时,进行二路归并*/ if(start < end){ int mid = (start+end)/2; merge_sort(arr,start,mid,temp); merge_sort(arr,mid+1,end,temp); Merge(arr,start,mid,end,temp); }}int main(){ int i=0; int arr[SIZE] = {1,4,5,88,24,2,9,12,89,23,11,0}; /*临时数组,作为参数传递,避免每次在merge中分配临时数组*/ int temp[SIZE]={-1}; merge_sort(arr,0,SIZE-1,temp); for(i=0;i<SIZE;i++) { printf("%d ",arr[i]); } return 0;}
0 0
- 归并排序 c语言实现
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- C语言实现归并排序
- 归并排序 --C语言实现
- 排序(6)---------归并排序(C语言实现)
- 归并排序及C语言实现
- 归并排序递归实现C语言
- 归并排序非递归实现C语言
- 归并排序 MergeSort C语言实现
- C语言实现的归并排序
- 归并排序C语言实现MergeSort
- 用C语言实现归并排序
- 归并排序的C语言实现
- C语言实现普通归并排序
- ActiveX中无标题CDHtmlDialog客户区的拖动实现
- 廖雪峰的Python教程
- Service的基本的用法
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- libgdx ModelInstance 的transform成员
- 归并排序--c语言实现
- Java 8十个lambda表达式案例
- JS学习十四天----服务器端执行JS代码
- Android 定制EditText 改变 底线颜色
- MYGUI和HGE
- I学霸官方免费教程四十二 :Java流之字节流 输入流和输出流 InputStream和OutputStream
- CLLocation的属性以及使用的解释
- 一个整形十进制数值存放在数组中的形式
- 《数据结构与算法分析》排序算法总结