java实现、配图解,附源码 十大经典排序算法( 二 )


java实现、配图解,附源码 十大经典排序算法

文章插图
 
排序结果展示:
java实现、配图解,附源码 十大经典排序算法

文章插图
 
2.快速排序快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进 。
2.1实现原理快速排序是对冒泡排序的一种改进 。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分所有的数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
java实现、配图解,附源码 十大经典排序算法

文章插图
 
2.2 动图演示
java实现、配图解,附源码 十大经典排序算法

文章插图
 
2.3实例展示
java实现、配图解,附源码 十大经典排序算法

文章插图
 
1 import java.util.Arrays; 2 public class QuickSort { 3public static void main(String[] args) { 4int[] arrays = new int[]{15,63,97,12,235,66}; 5sort(arrays,0,arrays.length-1); 6System.out.println(Arrays.toString(arrays)); 7} 8public static void sort(int[] arrays,int left,int right){ 9int l= left;10int r = right;11 12int pivot = arrays[(left+right)/2];13int temp = 0;14while (l<r){15 16//在左边查找小于中间值的17while(arrays[l]<pivot){18l++;19}20//查询右边小于中间值21while (arrays[r]>pivot){22r--;23}24if (l>=r){25break;26}27temp = arrays[l];28arrays[l] = arrays[r];29arrays[r] = temp;30 31 //交换完数据arrays[l] = pivot32if (arrays[l]==pivot){33r--;34}35if (arrays[r]==pivot){36l++;37}38if (r==l){39l++;40r--;41}42if (left<r){43sort(arrays,left,r);44}45if (right>l){46sort(arrays,l,right);47}48}49}50 }
java实现、配图解,附源码 十大经典排序算法

文章插图
 
排序结果展示:
java实现、配图解,附源码 十大经典排序算法

文章插图
 
3.基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法 。
基数排序是1887年赫尔曼、何乐礼发明的 。思想是讲整数按位数切割成不同的数字,然后按每个位数分别比较 。
3.1实现原理讲所有的待比较数值统一设置为同样的数位长度,位数比较短的数前面补零,然后从最地位开始依次进行一次排序,这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列 。
java实现、配图解,附源码 十大经典排序算法

文章插图
 
3.2 动图演示
java实现、配图解,附源码 十大经典排序算法

文章插图
 
3.3实例展示
java实现、配图解,附源码 十大经典排序算法

文章插图
 
1 import java.text.SimpleDateFormat;2 import java.util.Arrays;3 import java.util.Date;45 public class BasicSort {67public static void main(String[] args) {8int[] arrays = new int[]{15,63,97,12,235,66};9SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-mm-dd HH:MM:ss:SS"); 10System.out.println("开始排序前:"+simpleDateFormat.format(new Date())); 11sort(arrays); 12System.out.println("排序结束:"+simpleDateFormat.format(new Date())); 13} 1415 //1.获取原序列的最大位多少 16 //@param arrays 17public static void sort(int[] arrays){ 1819 //获取最大位数 20int max = 0; 21for(int i=0;i<arrays.length;i++){ 22if (arrays[i]>max){ 23max = arrays[i]; 24} 25} 2627 //获取字符串长度,所以把int类型转字符串类型 28int maxLength = (max+"").length(); 2930 //定义二维数组,大小10,表示10个桶,每一个桶则是一个数组 31 //[[],[],[],[],[]...] 32int[][] bucket = new int[10][arrays.length]; 3334 //辅助数组 35int[] bucketElementCount = new int[10]; 3637 //循环获取无序数列 38for (int j=0;j<arrays.length;j++){ 39int locationElement = arrays[j]%10; 4041 //放入桶中 42bucket[locationElement][bucketElementCount[locationElement]] = arrays[j] ; 43bucketElementCount[locationElement]++; 44} 4546 //遍历每一个桶,讲元素存放原数组中 47int index = 0; 48for (int k = 0;k<bucketElementCount.length;k++){ 49if (bucketElementCount[k] !=0){ 50for (int l = 0;l<bucketElementCount[k];l++){ 51arrays[index++] = bucket[k][l]; 52} 53} 54bucketElementCount[k] = 0; 55} 56System.out.println(Arrays.toString(arrays)); 5758 //第一轮针对个位数进行比较 59for (int j = 0;j<arrays.length;j++){ 60int locationElement = arrays[j]/1%10; 6162bucket[locationElement][bucketElementCount[locationElement]] = arrays[j]; 63bucketElementCount[locationElement]++; 64} 6566 //取出来按照桶的顺序放回原数组中 67int indx = 0; 68for (int k = 0;k<bucketElementCount.length;k++){ 69if (bucketElementCount[k] !=0){ 70for (int l=0;l<bucketElementCount[k];l++){ 71arrays[indx++] = bucket[k][l]; 72} 73} 74bucketElementCount[k] = 0; 75} 7677 //判断十位数 78for (int j = 0;j<arrays.length;j++){ 79int locationElement = arrays[j]/10%10; 8081bucket[locationElement][bucketElementCount[locationElement]] = arrays[j]; 82bucketElementCount[locationElement]++; 83} 8485 //取出来按照桶的顺序放回原数组中 86indx = 0; 87for (int k = 0;k<bucketElementCount.length;k++){ 88if (bucketElementCount[k] !=0){ 89for (int l=0;l<bucketElementCount[k];l++){ 90arrays[indx++] = bucket[k][l]; 91} 92} 93bucketElementCount[k] = 0; 94} 9596 //获取百位数比较 97for (int j = 0;j<arrays.length;j++){ 98int locationElement = arrays[j]/100%10; 99 100bucket[locationElement][bucketElementCount[locationElement]] = arrays[j];101bucketElementCount[locationElement]++;102}103 104 //取出来按照桶的顺序放回原数组中105indx = 0;106for (int k = 0;k<bucketElementCount.length;k++){107if (bucketElementCount[k] !=0){108for (int l=0;l<bucketElementCount[k];l++){109arrays[indx++] = bucket[k][l];110}111}112bucketElementCount[k] = 0;113}114System.out.println("基数排序后的顺序:"+Arrays.toString(arrays));115}116 }


推荐阅读