Java快速排序与归并排序及基数排序图解示例
快速排序、归并排序和基数排序是算法中常用的排序方法,以下分别进行详细讲解。
快速排序
快速排序是一种分治算法,其基本思想是将一个大的数据序列分成两个小的数据序列。具体做法是通过递归实现的,在每次递归时选定一个基准数(通常选第一个或者最后一个数),将整个序列中小于基准数的数放在基准数左边,大于基准数的数放在基准数右边。由于是递归操作,一直到左右两边的数列递归完成后排序就结束了。
示例:将数组 {8,4,2,5,9,1,6,3,7} 进行快速排序
选取基准数为数组的第一个数 8,依次和数组中的其他数进行比较。第一趟比较,将数组分为左半部分 {4,2,5,1,3} 和右半部分 {9,6,7},此时基准数位于中央。分别对左右两个子数组进行递归,分别选取子数组的第一个数 4 和 9 作为基准数,进行相似操作,最终得到排序后的数组 {1,2,3,4,5,6,7,8,9}。
归并排序
归并排序是一种分治算法,它将一个大的数组分成两个小的数组,将小的数组逐一合并成一个大的数组,从而实现排序。具体做法是递归分成小的数组,再逐个合并成大的有序数组,因为递归的过程中分成的小数组都是有序的,所以最终合并的数组也是有序的。
示例:将数组 {8,4,2,5,9,1,6,3,7} 进行归并排序
首先将数组分成两个子数组 {8,4,2,5} 和 {9,1,6,3,7}。分别对两个子数组进行递归,再将排好序的子数组合并成一个大的数组。对于子数组 {8,4,2,5},继续递归分成 {8,4} 和 {2,5},对其中的 {8,4} 进行排序得到 {4,8},对 {2,5} 进行排序得到 {2,5},将两个有序子数组合并成 {2,4,5,8}。对于子数组 {9,1,6,3,7},继续递归分成 {9,1} 和 {6,3,7},对其中的 {9,1} 进行排序得到 {1,9},对 {6,3,7} 进行排序得到 {3,6,7},将两个有序子数组合并成 {1,3,6,7,9}。最终将有序的两个子数组 {2,4,5,8} 和 {1,3,6,7,9} 合并成有序的整个数组 {1,2,3,4,5,6,7,8,9}。
基数排序
基数排序是一种比较简单的排序方法,它是通过将整个排序过程分成多轮,每轮按照不同的数位进行排序完成的。具体做法是将待排序数组中的每一个元素按照指定位置的数位进行比较排序,例如从个位开始,然后再从十位开始,以此类推直到最高位。最后,依次连接每一轮的排序结果即可得到最终的有序数组。
示例:将数组 {8,4,2,5,9,1,6,3,7} 进行基数排序,从个位开始排序
首先将数组中的每个数字按照个位数字的大小进行排序,得到 {2,4,6,8,1,3,5,7,9}。接下来按照十位数字的大小进行排序,得到 {1,2,3,4,5,6,7,8,9},最后按照百位数字的大小进行排序,因为所有数都没有百位的数字,所以直接得到最终的有序数组 {1,2,3,4,5,6,7,8,9}。
以上就是 Java 快速排序、归并排序及基数排序的详细说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java快速排序与归并排序及基数排序图解示例 - Python技术站