八种排序方法(七)——归并排序
来源:互联网 发布:js上拉查看图文详情 编辑:程序博客网 时间:2024/05/17 22:43
编译器:Xcode
编程语言:C++
源程序:
#include<iostream>using namespace std;void merge(int a[],int low,int mid,int high){ int i,k; //定义一个临时数组存放传进来的无序数组排好序之后的数组 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(a[left_low]<=a[right_low]) temp[k]=a[left_low++]; else temp[k]=a[right_low++]; } //左序列如果有剩下元素未排序,加到临时数组的末尾 if(left_low<=left_high) { for(i=left_low;i<=left_high;i++) temp[k++]=a[i]; } //右序列如果有剩下元素未排序,加到临时数组的末尾 if(right_low<=right_high) { for(i=right_low;i<=right_high;i++) temp[k++]=a[i]; } //将排好序的小分组转移到原数组中 for(i=0;i<high-low+1;i++) { a[low+i]=temp[i]; } free(temp);}void mergeSort(int a[],int first,int last)//归并排序{ int mid=0; //将数组不停的二分分组再组合,直到每组只剩下一个元素 if(first<last) { mid=(first+last)/2; mergeSort(a, first, mid); mergeSort(a, mid+1, last); merge(a,first,mid,last); }}int main(){ int a[10] = {43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; cout<<"归并排序:"<<endl; mergeSort(a, 0, 9); for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; return 0;}
运行结果:
归并排序:2 4 6 7 23 43 65 65 79 98 Program ended with exit code: 0
阅读全文
0 0
- 八种排序方法(七)——归并排序
- 算法——排序(七)归并排序
- 八种排序方法(一)——选择排序
- 八种排序方法(二)——冒泡排序
- 八种排序方法(三)——插入排序
- 八种排序方法(四)——快速排序
- 八种排序方法(五)——希尔排序
- 八种排序方法(六)——堆排序
- 排序七 归并排序
- 八种排序方法(八)——基数排序
- Java排序算法(八):归并排序
- 排序算法(八) 归并排序
- 排序算法(八)归并排序
- 排序—归并排序
- 排序算法(七):归并排序
- 八大排序算法(七)归并排序
- 排序算法(七):归并排序
- 排序算法(七):归并排序
- 习题7(7.1)
- windows系统安装python 64 位 pip环境
- 2017.12.17
- spring boot org.springframework.data.domain.PageRequest分页报错
- 创建SSM项目所需
- 八种排序方法(七)——归并排序
- linux shell 脚本命令学习笔记
- jQuery:DOM的操作总结(二)
- OPNET Basic Process Lesson
- android在XML中画横线、竖线和虚线
- 在 linux 下使用 CMake 构建应用程序
- Mysql 索引的几个问题
- Oracle总结二
- 感受野receptive field个人理解