Java常用的8种排序方法:
1.直接插入排序:
直接插入排序的设计思路(默认由小到大排序):
1.数组第一位默认为有序位,设置for循环遍历;
2.从第i位与前一位的值开始比较,如果小于前一位,则设置一个中间变量保存第i位的值;
3.设置变量k,用于记录被替换的值的位置;
4.通过for循环替换,如果值大于第i位的值,那么将第i位的值替换为这个大的值,之后继续与更前位置的值比较,如果还是大于第i位的值,那么将i-1位的值替换,然后继续比较,每次往前进一位比较时,k的值都要进行递减,如此反复。
5.直到值比第i位小时,将k位置的值替换成第i位的值。
直接插入排序的逻辑流程图,如下:
2.希尔排序
希尔排序的设计思路:
1.根据数组长度取一半(d = array.length/2),for循环遍历,循环周期就是数组长度的一半;
2.用for循环取temp的值;
3.再用for循环,比较temp的值与对应位置的值大小,如果array[j]的值大于temp,则将array[j+d]的值替换为array[j];
4.最后将array[j]的值替换为temp,如此反复。
希尔排序的逻辑流程图,如下:
3.简单选择排序
简单选择排序的设计思路:
1.数组for循环遍历,设置position记录位置;
2.再设置一个for循环用于比较大小,找出最小的数,
3.将第一个数替换成最小的数,将原先最小的数所在的位置替换为第一个数的值;
4.排除第一个数,继续之前的循环,如此反复。
简单选择排序逻辑流程图,如下:
4.堆排序(二叉树)
堆排序的设计思路:
1.建堆,即将数组堆化,首先按照数组的顺序建堆,然后根据堆的规则进行调整;
2.堆调整好后,开始进行交换,堆顶与最后一个数进行交换,然后将最大的数,即交换后最后一个数移出;
3.交换后的数,重新调整以满足堆的规则,之后继续交换移出最大的数,如此反复。
5.冒泡排序
冒泡排序的设计思路:
1.一组数中,让相邻的两个数依次比较,让较大的数排在后面,较小的数排在前面,这样最大的数就会在最后一位;
2.然后除去最后一位数,继续第二轮比较,第二轮结束第二大的数就会在倒数第二位,如此反复。
6.快速排序
快速排序的设计思路:
1.选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描;
2.将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置;
3.然后再用同样的方法递归地排序划分的两部分。
7.归并排序
归并排序的设计思路:
1.将待排序序列分为若干子序列,每个子序列是有序的;
2.然后再把有序子序列合并为整体有序序列。
8.基数排序
基数排序的设计思路:
1.将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。
2.然后,从最低位开始,依次进行排序;
3.这样从最低位排序一直到最高位排序完成后,数列就变成一个有序序列。