java基本排序之归并排序
来源:互联网 发布:java语言程序设计2 编辑:程序博客网 时间:2024/05/17 05:03
归并排序原理:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2](向上取整),个长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序。归并排序的一种稳定排序,即相等元素的顺序不会改变.
时间复杂度:归并排序的最好、最坏和平均时间复杂度都是O(nlogn),而空间复杂度是O(n),比较次数介于(nlogn)/2和(nlogn)-n+1,赋值操作的次数是(2nlogn)。因此可以看出,归并排序算法比较占用内存,但却是效率高且稳定的排序算法。
public int[] sort(int[] nums, int low, int high) { int mid = (low + high) / 2; if (low < high) { // 左边 sort(nums, low, mid); // 右边 sort(nums, mid + 1, high); // 左右归并 merge(nums, low, mid, high); } return nums; } public void merge(int[] nums, int low, int mid, int high) { int[] temp = new int[high - low + 1]; int i = low;// 左指针 int j = mid + 1;// 右指针 int k = 0; // 把较小的数先移到新数组中 while (i <= mid && j <= high) { if (nums[i] < nums[j]) { temp[k++] = nums[i++]; } else { temp[k++] = nums[j++]; } } // 把左边剩余的数移入数组 while (i <= mid) { temp[k++] = nums[i++]; } // 把右边边剩余的数移入数组 while (j <= high) { temp[k++] = nums[j++]; } // 把新数组中的数覆盖nums数组 for (int k2 = 0; k2 < temp.length; k2++) { nums[k2 + low] = temp[k2]; } }
0 0
- java基本排序之归并排序
- 基本排序之归并排序
- Java 排序之 归并排序
- java排序之归并排序
- Java排序之归并排序
- java排序之 --- 归并排序
- java之归并排序
- Java之归并排序
- 基本排序之详解归并排序
- 排序-归并排序-基本
- java基础之归并排序
- 归并排序之java实现
- JAVA语言之归并排序
- 归并排序之Java实现
- java算法之归并排序
- 归并排序之Java实现
- java算法之归并排序
- 排序算法之归并排序(JAVA)
- python爬虫xpath的语法
- 蓝牙基带 链接控制器操作
- fastjson简单使用
- 无刷新提交表单(php+jquery+ajax+json的一个最简单实例 )
- Unity开发基础——运算符和表达式学习笔记
- java基本排序之归并排序
- 数据库Mysql的安装配置
- C#中mySQL 使用语句LOAD DATA LOCAL INFILE 'record.log' INTO TABLE PT_LOG;导入数据时乱码问题
- java.lang.ClassNotFoundException: org.apache.hadoop.fs.CanUnbuffer
- 左式堆
- 使用CDO.message加载eml文件
- 解决ubuntu下shell脚本报错
- 面向对象原则--开闭原则
- 死锁条件与预防