排序算法之归并排序(Java)
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之归并排序(Java)相关的知识,希望对你有一定的参考价值。
通过Java实现归并排序
归并排序介绍
归并排序是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法的一个非常典型的应用。
归并算法的主要步骤
- 将待排序的序列分成两个子序列
- 将子序列合并并排序
- 重复一二步骤
归并排序图解实现
具体代码实现
合并子序列的方法
/**
*
* @param arr 排序的原始数组
* @param left 左边有序序列的初始索引
* @param mid 中间索引
* @param right 右边索引
* @param temp 做中转的数组
*/
public static void merge(int[] arr,int left,int mid,int right,int[] temp)
int i = left;//左边有序序列的初始化索引
int j = mid + 1;//右边有序序列的初始化索引
int t = 0;//指向temp数组的当前索引
//按规则将左右两边有序数据填充到temp数组中
while(i <= mid && j <= right)
//如果左边的有序数列元素小于右边将左边的元素填入temp数组
if (arr[i] <= arr[j])
temp[t] = arr[i];
t++;
i++;
else
temp[t] = arr[j];
t++;
j++;
//把左边剩余的一边依次填入temp数组
while (i <= mid)
temp[t] = arr[i];
t++;
i++;
//把右边剩余的一边依次填入temp数组
while (j <= right)
temp[t] = arr[j];
t++;
j++;
t = 0;
int tempLeft = left;
while (tempLeft <= right)
arr[tempLeft] = temp[t];
t++;
tempLeft++;
分+合并子序列的方法
public static void mergeSoft(int[] arr,int left,int right,int[] temp)
if (left < right)
int mid = (left + right) / 2; //中间索引
//向左递归分解
mergeSoft(arr,left,mid,temp);
//向右递归分解
mergeSoft(arr,mid+1,right,temp);
//每分解一次就合并一次
merge(arr,left,mid,right,temp);
测试
测试代码
public static void main(String[] args)
int[] arr = 8,6,2,4,1,5,7,3;
System.out.println("=================排序前================");
System.out.println(Arrays.toString(arr));
int[] temp = new int[arr.length];
mergeSoft(arr,0,arr.length-1,temp);
System.out.println("=================排序后================");
System.out.println(Arrays.toString(arr));
测试结果
以上是关于排序算法之归并排序(Java)的主要内容,如果未能解决你的问题,请参考以下文章