概述
排序算法有好多种,也在特殊的场景中,我们经常需要对我们的数据进行排序,这里对经典的排序做一个记录整理。
一冒泡排序
原理分析
冒泡排序其实就是对一组数以类似冒泡对形式,进行从大到小或者从小到大的排序,那么什么是冒泡呢?
其实也简单,比如有一组数字:3,9,6,2
以上图只比较了第一轮,会冒出一个较大大,依此类推进行比较。
以此比较两个数字,将较较小的数字一个一个冒上来,将相反的较大的数字往下沉,然后内层循环每一轮比较就会冒出来一个最大数字,这样有2层循环即可,外层循环完后,所有的数字就冒完了。
代码实现(java)
public class MPTest {
public static void main(String[] args) {
int [] numbers={3,9,6,2};
int temp=0;
for(int i=0;i<numbers.length-1;i++){
for(int j=0;j<numbers.length-1-i;j++){//内层循环一次冒泡出一个比较小的数上来
if(numbers[j]>numbers[j+1]){//如果第一个数字比第二个大则交换位置
temp=numbers[j];
numbers[j]=numbers[j+1];
numbers[j+1]=temp;
}
}
}
for(int i=0;i<numbers.length;i++){
System.out.println("第"+i+"个数字是:"+numbers[i]);
}
}
}
输出结果是:
第0个数字是:2
第1个数字是:3
第2个数字是:6
第3个数字是:9
二选择排序
原理分析
选择排序其实其实思路也是比较简单的,也是2层循环。
主要思路是记录一个最小值,然后内层循环如果有比它小的就跟这个最小值交换位置,这样就能确定第一位最小值,然后第二次循环也是如此,以此类推就能按照由小到大排序。
还是对这几个数字进行排序:3 9 6 2
第一次循环:2 9 6 3
第二次循环:2 3 6 9
代码实现(java)
public class XZTest {
public static void main(String[] args) {
int[] numbers = {3, 9, 6, 2};
int temp=0;
for (int i = 0; i < numbers.length; i++) {
int min = i;
for (int j = i + 1; j < numbers.length; j++) {
if(numbers[j]< numbers[min]){
min=j;
}
}
if(i!=min){
temp=numbers[i];
numbers[i]=numbers[min];
numbers[min]=temp;
}
}
for(int i=0;i<numbers.length;i++){
System.out.println("第"+i+"个数字是:"+numbers[i]);
}
}
}
输出结果是一样对:
第0个数字是:2
第1个数字是:3
第2个数字是:6
第3个数字是:9