归并排序
来源:互联网 发布:温州平阳网络问政平台 编辑:程序博客网 时间:2024/05/20 16:34
归并排序是分治思想的典型应用。时间复杂度是O(nlgn)[分解的过程是O(lgn),合并的过程是O(n)],是稳定排序。
public class MergeSort{//arr[start]-arr[mid] arr[mid+1]-arr[end]分别是有序的public static void merge(int[] arr,int start,int mid,int end){int[] tmp = new int[arr.length];int index = start;int tmp_mid = mid;int tmp_start = start;int tmp_end = end;while(start < tmp_mid && mid<=end){if(arr[start] <= arr[mid]){tmp[index++] = arr[start];start++;}else{tmp[index++] = arr[mid];mid++;}}/*while循环退出有两种情况,start>=tmp_mid或mid>end*/if(start >= tmp_mid){for(int i = mid;i <= end; i++)tmp[index++] = arr[i];}if(mid > end){for(int i = start;i<tmp_mid;i++)tmp[index++] = arr[i];}for(int i = tmp_start; i <= tmp_end; i++)arr[i] = tmp[i];}//死循环public static void mergeSort(int[] arr,int start,int end){if(start>=end) return;int mid = (start+end)/2;mergeSort(arr,start,mid);mergeSort(arr,mid+1,end);merge(arr,start,mid+1,end);}public static void main(String[] args){int[] arr = {0,1,5,7,2,5,6};mergeSort(arr,1,arr.length-1);display(arr);}public static void display(int[] arr){for(int i:arr){System.out.print(i+" ");}System.out.println();}}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- linux top 命令详解
- 首字母变大写
- C/C++宏定义中#与##区别
- mysql索引
- spring的jar包下载地址
- 归并排序
- 嵌入式第七讲 构建根文件系统
- input 和<fmt:formatDate>的结合使用
- leetcode || 107、Binary Tree Level Order Traversal II
- LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址
- Nmon在RH6x86_64下的简易使用手册
- 第一次大作业分析【番外——特效篇】
- Longest Common Prefix
- 【自用】OI计划安排表一轮