上次我们已经为大家介绍过java中插入、分治和快速排序的内容,今天再来为大家介绍一下java中选择排序与归并排序的具体内容,并且通过实际的代码为大家解析。

首先我们需要了解的是,选择排序也是一种简单直观的排序算法,实现原理比较直观易懂。

1.在未排序数列中找到最小元素;2.然后将其与数列的首部元素进行交换;3.在剩余未排序元素中继续找出最小元素;4.将其与已排序数列的末尾位置元素交换;5.以此类推,直至所有元素圴排序完毕,图片如下所示:

java 数字从大到小排序 java从小到大排序算法代码_选择排序java从小到大代码

代码如下所示:public static void sort(int[] arr)

{
for (int i = 0; i 
{
int min = i; // 遍历的区间最小的值
for (int j = i + 1; j 
{
if (arr[j] 
{
// 找到当前遍历区间最小的值的索引
min = j;
}
}
if (min != i)
{
// 发生了调换
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
}

接下来我们看一下归并排序。

归并排序,简而言之就是把一串数,从中平等分为两份,再把两份再细分,直到不能细分为止,其实就是分而治之的分的步骤。再从最小的单元,两两合并,合并的规则是将它们按从小到大的顺序放到一个临时数组中,再把这个临时数组替换原数组对应的位置,这就是治。具体图解如下所示:

java 数字从大到小排序 java从小到大排序算法代码_java_02

java 数字从大到小排序 java从小到大排序算法代码_归并排序_03

java 数字从大到小排序 java从小到大排序算法代码_java_04

代码展示如下所示:public static void mergeSort(int[] a, int s, int e)

{
int m = (s + e) / 2;
if (s 
{
mergeSort(a, s, m);
mergeSort(a, m + 1, e);
//归并
merge(a, s, m, e);
}
}
private static void merge(int[] a, int s, int m, int e)
{
//初始化一个从起始s到终止e的一个数组
int[] temp = new int[(e - s) + 1];
//左起始指针
int l = s;
//右起始指针
int r = m + 1;
int i = 0;
//将s-e这段数据在逻辑上一分为二,l-m为一个左边的数组,r-e为一个右边的数组,两边都是有序的
//从两边的第一个指针开始遍历,将其中小的那个值放在temp数组中
while (l <= m && r <= e)
{
if (a[l] 
{
temp[i++] = a[l++];
}
else
{
temp[i++] = a[r++];
}
}
//将两个数组剩余的数放到temp中
while (l <= m)
{
temp[i++] = a[l++];
}
while (r <= e)
{
temp[i++] = a[r++];
}
//将temp数组覆盖原数组
for (int n = 0; n 
{
a[s + n] = temp[n];
}
}

以上就是有关在java中选择排序与归并排序的具体内容,并且通过实际的代码为大家展示