文章标题
来源:互联网 发布:天刀女捏脸数据导入 编辑:程序博客网 时间:2024/04/30 07:58
- 排序思想
归并排序实际上是分治法在排序上的应用,将一个完整的数列切割成单个的序列,再两两合并,知道最后重新合成一个完整的数列,这是数列已经是排序后的了。具体归并过程见下图
使用红色方框框住的就是进行合并的数列。该排序的时间复杂度是O(nlogn) - 代码
package merge;import java.util.Arrays;public class MergeDemo { public static void main(String[] args) { int [] arr={1,3,6,85,4,5,8,6,4,6,9,0}; // 执行归并排序 mergeSort(arr,0,arr.length-1); } public static void mergeSort(int[] data,int left,int right){ if(left>=right){ return; } int mid=(left+right)/2; //对左边数据进行划分 mergeSort(data,left,mid); //对右边数据进行划分 mergeSort(data,mid+1,right); // 归并排序 merge(data,left,mid,right); //打印每一次归并排序后的结果 System.out.println(Arrays.toString(data)); } private static void merge(int[] data, int left, int mid, int right) { // 建立一个临时数组 int[] temp=new int[data.length]; // 中间索引 即后半段第一个索引 int center=mid+1; // 记录临时数组开始索引 int thrid=left; // 记录开始时的索引 int tempsize=left; // 开始归并 while(left<=mid&¢er<=right){ // 左边的元素较小 if(data[left]<=data[center]){ temp[thrid++]=data[left++]; // 左边的元素较小 }else{ temp[thrid++]=data[center++]; } } // 左边未取完 while(left<=mid){ temp[thrid++]=data[left++]; } // 右边未取完 while(center<=right){ temp[thrid++]=data[center++]; } // 临时数组的数据转给 data while(tempsize<=right){ data[tempsize]=temp[tempsize++]; } }}
1 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Android中直播视频技术探究之---基础知识大纲介绍
- SSH框架包的问题
- 使用Java创建RESTful Web Service
- sqoop exort data from DB2 or Oracle to Hadoop
- Clojure 学习入门(11)- 宏 macro
- 文章标题
- Codeforces Round #358 (Div. 2) E. Alyona and Triangles (找面积最大三角形)
- 404.leetcode Sum of Left Leaves(easy)[二叉树 递归]
- 用树莓派学编程系列3——环境温湿度测量2
- 希尔排序算法
- java常用函数
- 使用jQuery更新和交互
- Android学习计划
- Clojure 学习入门(12)- map/pmap