选择排序java从小到大代码_java中选择排序与归并排序的内容,详细解析

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

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

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

afdb0ab9516cad38b9b2bbffda067b83.png

代码如下所示: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;

}

}

}

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

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

e1c906a77203ea6ab7b4a2f17ca2044f.png

262f21a374540e4bf5fe05409e235c95.png

46f7a572b4cd33f93e5b1fc776480726.png

代码展示如下所示: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中选择排序与归并排序的具体内容,并且通过实际的代码为大家展示。如果你对java知识感兴趣,想要了解更多java基础,敬请关注奇Q工具网。

推荐阅读:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值