基数

8. 基数排序

隐身守侯 提交于 2020-03-20 16:31:32
思想 基数排序,是按照元素的更小元素组成来进行排序。拿常用的数字排序举例,会先对个位进行排序,然后对十位进行排序。 其中,关键是如何对个位进行排序,如何对十位进行排序。 我们知道对于数字的每一位,只有10个数字(0-9),这就是基数。所以故名,基数排序。基数排序所以可以理解为适用于基数是有限的情况下。 所以基数排序中的基数,相当于把计数排序中的计数数组的大小确定下来了。 那么如何对个位、十位进行排序呢?可以用到计数排序。 实现 import java.util.Arrays; public class RadixSort { public static void main(String[] args) { int[] array = { 1200, 292, 121, 72, 233, 44, 12 }; radixSort(array, 10, 4); System.out.println(Arrays.toString(array)); } public static void radixSort(int[] array, int radix, int d){ int[] tempArray = new int[array.length]; int[] count = new int[radix]; int rate = 1; for (int i = 0; i < d; i+

快速排序

时光毁灭记忆、已成空白 提交于 2019-11-26 12:51:27
基础排序:快速排序 算法实现: 在排序数组中选择一个数作为基数(我这里选择数组末尾的数) 根据基数把数组切为三个部分:1.比基数小的在左边;2.比基数大的在右边;3.跟基数相等的在中间 如此分开后,三个小数组整体有序(三个数组只是以下标分开,并不是新建数组) 递归左右两个小数组 最后得到的数组就是有序的 public class QuickSort { private void swap ( int [ ] arr , int i , int j ) { int temp = arr [ i ] ; arr [ i ] = arr [ j ] ; arr [ j ] = temp ; } public void quickSort ( int [ ] arr ) { if ( arr == null || arr . length < 2 ) { return ; } quickSort ( arr , 0 , arr . length - 1 ) ; } private void quickSort ( int [ ] arr , int L , int R ) { if ( L < R ) { int [ ] p = partition ( arr , L , R ) ; //对左边进行递归 quickSort ( arr , L , p [ 0 ] - 1 ) ; /