📑前言
本文主要是【排序】——希尔排序、计数排序的文章,如果有什么需要改进的地方还请大佬指出⛺️
🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见
目录
- 📑前言
- 希尔排序原理
- 基数排序
- 📑文章末尾
希尔排序原理
- 将排序区间按步长分成若干有序子区间,进行插入排序,最后步长为1的时候排序完成
package 蓝桥杯练习;import java.util.Arrays;public class 希尔排序 {public static void main(String[] args) {// TODO Auto-generated method stubint a[] = {49,38,65,97,76,13,27,49,55,4};shellSort(a);System.out.println(Arrays.toString(a));}public static void shellSort(int a[]) {for(int gap=a.length/2;gap>0;gap=gap/2) {//对每一分组进行直接插入排序 0-gap 2gap 3gapfor(int i=gap;i<a.length;i++) {int j = i;//存放上一组要处理的元素 从j j-gap j-2gap ...最头上while(j-gap>=0 && a[j-gap] > a[j]) {int temp = a[j];a[j] = a[j-gap];a[j-gap] = temp;j = j - gap;//下一次继续从分组里的前一个位置开始}}}}
}
基数排序
- 原理类似于桶排序,进行计数之后,将最小,第二小的数依次找出
package 蓝桥杯练习;import java.util.Arrays;public class 基数排序 {public static void main(String[] args) {// TODO Auto-generated method stubint a[] = {28,34,30,26,36,27,28,20,22};countSort(a);}public static void countSort(int a[]) {int b[] = new int[a.length];int max = a[0],min = a[0];for(int i: a) {if(i>max) {max = i;}if(i<min) {min = i;}}int dis = max-min+1;//c用来做统计次数和累加和int c[] = new int[dis];for(int i=0;i<a.length;i++) c[a[i]-min]+=1;for(int i=1;i<c.length;i++) c[i] = c[i] + c[i-1];for(int i=a.length-1;i>=0;i--) {//得到第几小的数b[c[a[i]-min]-1] = a[i];c[a[i]-min]--;}System.out.println(Arrays.toString(b));}}