归并排序 merge sort
来源:互联网 发布:淘宝手机端店铺装修图 编辑:程序博客网 时间:2024/06/03 16:16
归并排序是基于归并操作的排序算法。归并排序是对分治思想的典型应用。
归并排序说起来很简单:先将数据分开排序,然后再合并起来,最后形成一个排好的序列。
合并操作:比较a[i]和b[j],如果a[i]<=b[j],令r[k]=a[i],然后k和i分别加1,如果a[i]>b[j],令r[k]=b[j],然后令k和j分别加1。直到两个数组中某个数组的全部元素都复制到数组r中。然后将另一个数组的剩余元素全部复制到数组r中。
具体代码如下:
//--------------------//归并排序//--------------------#include<cstdio>#define size 9int a[size]={9,2,4,3,6,8,7,5,1};int b[9];int kase=0;void print(){for(int i=0;i<size;i++)printf(" %d",a[i]);printf("\n");}void merge(int* array,int* array2,int left,int mid,int right){int i=left,j=mid+1,k=0;while(i<=mid&&j<=right){if(array[i]<=array[j])array2[k++]=array[i++];elsearray2[k++]=array[j++];}while(i<=mid){array2[k++]=array[i++];}while(j<=right){array2[k++]=array[j++];}for(i=left,k=0;i<=right;)array[i++]=array2[k++];printf("第%d次归并排序:",++kase);for(i=left;i<=right;i++)printf(" %d",array[i]);printf("\n");}void merge_sort(int* array,int* array2,int left,int right){if(left>=right){return;}int mid=(right+left)/2;merge_sort(array,array2,left,mid);merge_sort(array,array2,mid+1,right);merge(array,array2,left,mid,right);}int main(){printf("排序前的数组:");print();merge_sort(a,b,0,8);printf("执行归并排序后的数组:");print();return 0;}代码运行结果如下:
阅读全文
0 0
- 归并排序(merge sort)
- 归并排序(Merge sort)
- 归并排序Merge-Sort
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序(Merge Sort)
- 归并排序Merge sort
- 归并排序 (Merge Sort)
- 归并排序(Merge Sort)
- 归并排序 Merge sort
- merge sort归并排序
- 归并排序 merge sort
- 归并排序 Merge sort
- 归并排序 merge sort
- Merge Sort归并排序
- merge sort(归并排序)
- 归并排序(merge Sort)
- JAVA Eclipse开发Android程序会经常闪退是怎么回事
- JAVA Eclipse开发Android如何让屏幕保持为竖直或水平状态
- iOS开发笔记-UI-UIField
- JAVA Eclipse开发Android如何让超出界面的部分自动显示滚动条
- JAVA Eclipse开发Android如何设置滚动条最大值最小值
- 归并排序 merge sort
- JAVA Eclipse如何安装Swing
- Liunx
- JAVA Eclipse如何导出APK程序
- JAVA Eclipse如何开发Android的多页面程序
- NOIP 模拟总结10.17
- JAVA Eclipse如何设置点击按钮切换图片
- JAVA Eclipse如何设置编程环境字体
- JAVA Eclipse如何重命名包