排序算法:归并排序
来源:互联网 发布:js checkbox按钮 编辑:程序博客网 时间:2024/05/25 16:40
归并排序:步骤一、对序列按照坐标中间值划分为左半部分和有半部分(这点和快速排序不同,归并排序按照坐标选择,与元素本身无关),对两边分别重复此操作,知道每个细分的小序列长度为1。
步骤二、将细分的已经有序的序列合并。
简单来说就是一个递归加合并的操作,跟线段树非常相似(完全一模一样有木有?)。
相对于快速排序来说,实现起来倒是很方便。
#include<stdio.h>#include<string.h>#define N 1005void merge_sort(int a[],int l,int r,int b[]){if(l>=r) return ;int mid=(l+r)/2;/**********************//*递归,对序列的左右两边分别排序*/merge_sort(a,l,mid,b);merge_sort(a,mid+1,r,b);/*********************//*********************//*回溯,将序列的左右两个部分合并起来*/int s1=l,s2=mid+1;int k=l;while(s1<=mid&&s2<=r){if(a[s1]>a[s2]) b[k++]=a[s2++];else b[k++]=a[s1++];}while(s1<=mid)b[k++]=a[s1++];while(s2<=r)b[k++]=a[s2++];/********************//*将有序的序列重新复制给原序列*/int i;for(i=l;i<=r;i++) a[i]=b[i];return ;}int main(){int n;int a[N],b[N];while(scanf("%d",&n)!=EOF){int i;for(i=0;i<n;i++) scanf("%d",&a[i]);merge_sort(a,0,n-1,b);//调用排序函数for(i=0;i<n;i++) printf("%d ",a[i]);printf("\n");}return 0;}
0 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 全面进军可穿戴市场,Google 宣布 Android Wear 平台
- 俄罗斯方块(一)---Windows SDK
- java Date装成英文String后,无法再转回Date
- P2020RDB-sata移植之U-BOOT篇
- LeetCode Recover Binary Search Tree
- 排序算法:归并排序
- 手把手教您开发JAVA微信SDK-新手接入
- Primer_Four
- PHP将网址快捷方式保存到桌面
- openfire插件的编译方法
- 25个可遇不可求的jQuery插件
- 1、断箭
- const和#define
- java对象序列化和反序列化