归并排序(C语言版本)
来源:互联网 发布:企业软件 编辑:程序博客网 时间:2024/06/07 07:13
基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
代码:
#include<stdio.h>#include<windows.h>void merge_array(int *arr,int low,int mid,int high){ int k,i; int *temp = (int *)malloc((high-low+1)*sizeof(int)); int left_low = low; int left_high = mid; int right_low = mid + 1; int right_high = high; for(k=0;left_low<=left_high && right_low<=right_high;k++) { if(arr[left_low]<=arr[right_low]) { temp[k] = arr[left_low++]; }else { temp[k] = arr[right_low++]; } } if(left_low<=left_high) { for(i=left_low;i<=left_high;i++) { temp[k++] = arr[i]; } } if(right_low<=right_high) { for(i=right_low;i<=right_high;i++) { temp[k++] = arr[i]; } } for(i=0;i<high-low+1;i++) { arr[low+i] = temp[i]; } free(temp); return;}void merge_sort(int *arr,int first,int last){ int mid = 0; if(first<last) { mid = (first+last)/2; merge_sort(arr,first,mid); merge_sort(arr,mid+1,last); merge_array(arr,first,mid,last); } return;}int main(){ int a[] = {49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; int n= 28; int i; for(i=0;i<n;i++) { printf("%d\t",a[i]); } printf("\n\n"); merge_sort(a,0,n-1); for(i=0;i<n;i++) { printf("%d\t",a[i]); } printf("\n"); system("pause"); return 0;}
阅读全文
0 0
- 归并排序(C语言版本)
- 归并排序(C语言)
- 归并排序(C语言)
- 归并排序(C语言)
- 归并排序(c语言)
- 归并排序(递归版本)C实现~
- 归并排序C语言
- 归并排序C语言
- C语言 归并排序
- 归并排序(C语言实现)
- 归并排序 C语言数据结构
- 归并排序 c语言实现
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序C语言代码
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- Unity常用的设计模式_状态模式
- 基于UDP的socket编程
- thinkphp3.2嵌入百度编辑器ueditor
- 学习ubuntu--常用命令(一)
- C++实现内存检测原理浅谈
- 归并排序(C语言版本)
- centos安装软件时出现的问题
- resp.sendRedirect()方法返回中文的问题
- 关于STM32影子寄存器和预装载寄存器和TIM_ARRPreloadConfig
- QTableWidget 显示图片
- Android支持不同的设备
- 关于微信支付,以及返回-1的问题(千万不要慌不要慌!)
- Python如何批量读存文件夹内所有照片
- jenkins下搭建c++持续集成环境