前言
排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
常见的排序有:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序等。
冒泡排序
a、冒泡排序,是通过每一次遍历获取最大/最小值
b、将最大值/最小值放在尾部/头部
c、然后除开最大值/最小值,剩下的数据在进行遍历获取最大/最小值
Tips: 由于冒泡排序只在相邻元素大小不符合要求时才调换他们的位置, 它并不改变相同元素之间的相对顺序, 因此它是稳定的排序算法.
代码展示:
public static void main(String[] args) {
/*
* 有15个数字要求分别用选择法和冒泡法从大到小输出
*/
Scanner sc = new Scanner(System.in);
double[] indexs = new double[15];
for (int i = 0; i < indexs.length; i++) {
System.out.print("请输入第" + (i + 1) + "个数字:");
indexs[i] = sc.nextDouble();
}
for (int i = 0; i < indexs.length - 1; i++) {
for (int j = 0; j < indexs.length - 1 - i; j++) {
if (indexs[j] < indexs[j + 1]) {
double temp = indexs[j];
indexs[j] = indexs[j + 1];
indexs[j + 1] = temp;
}
}
}
System.out.print("冒泡排序:");
for (int i = 0; i < indexs.length; i++) {
System.out.print(indexs[i] + "\t");
}
}
动图效果 :
选择排序
a、将第一个值看成最小值
b、然后和后续的比较找出最小值和下标
c、交换本次遍历的起始值和最小值
d、说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。
Tips: 选择排序每次交换的元素都有可能不是相邻的, 因此它有可能打破原来值为相同的元素之间的顺序. 比如数组[2,2,1,3], 正向排序时, 第一个数字2将与数字1交换, 那么两个数字2之间的顺序将和原来的顺序不一致, 虽然它们的值相同, 但它们相对的顺序却发生了变化. 我们将这种现象称作 不稳定性 .