排序算法——归并排序
来源:互联网 发布:个人淘宝网店怎么申请 编辑:程序博客网 时间:2024/06/07 03:39
算法思想:先分割,再和并。
将数列先分成两份,在将分割出再进行分割,直至无法分割(单一元素),然后在将其按按照已排序好的两个数列进行合并。
感受:光看算法解释好像很繁琐啰嗦,但其运行效率比冒泡、快速、插入排序要快。(具体为啥,我目前也不懂)
实现代码:
public class MyMergeSort {
public static void main(String[] args) {
int a[] = {1,34,32,21,45,3,23,7,3,7,54,43};
mergeSort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
private static void mergeSort(int[] a) {
System.out.println("开始排序:");
sort(a,0,a.length-1);
}
private static void sort(int[] a, int left, int right) {
if(left>=right){
return;
}
int mid = (left+right)/2;
sort(a,left,mid);
sort(a,mid+1,right);
merge(a,left,mid,right);
}
private static void merge(int[] a, int left, int mid, int right) {
int[] temp = new int[a.length];
int r1 = mid+1;
int tIndex = left;
int cIndex = left;
while(left <= mid && r1 <= right){
if(a[left] > a[r1]){
temp[tIndex++] = a[r1++];
}else{
temp[tIndex++] = a[left++];
}
}
while(left<=mid){
temp[tIndex++] = a[left++];
}
while(r1 <= right){
temp[tIndex++] = a[r1++];
}
while(cIndex<=right){
a[cIndex] = temp[cIndex];
cIndex++;
}
}
}
(其中递归算法需要思考下如何推理)
- 排序算法—归并排序
- 排序算法—归并排序
- 排序算法总结——归并排序
- 经典排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 算法——排序之归并排序
- 排序算法——归并排序
- 排序算法系列——归并排序
- 【排序算法】——归并排序
- 排序算法——归并排序
- 经典排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 常用排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 约瑟夫环问题 详解
- 【BZOJ 4034】 [HAOI2015]树上操作
- Java基础之集合
- Jenkins进阶系列之——15Maven获取Jenkins的Subversion的版本号
- 类型转换函数
- 排序算法——归并排序
- Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件
- fputcsv 和 fgetcsv 的使用
- O(nlogn)实现LCS与LIS
- Linux负载均衡软件LVS之一(概念篇)
- C++ 拷贝构造函数
- Jenkins进阶系列之——17Jenkins升级、迁移和备份
- 视图、用户管理
- 关于wampserver离线状态的问题