从头实现选择排序
思路:不是见到更小的元素时就交换位置,而是在找到最小的元素时才交换位置。遍历数组的前 n - 1 个元素,从它们及之后的元素中找到最小的元素,与它们交换位置。
数组有 n 个元素,在从第 1 个元素开始的所有 n 个元素中找到最小元素,与第 1 个元素交换位置;在从第 2 个元素开始的所有 n - 1 个元素中找到最小元素,与第 2 个元素交换位置;……;在从第 n - 1 个元素开始的所有 2 个(n - i + 1)元素中找到最小元素,与第 n - 1 个元素交换位置。
思路:不是见到更小的元素时就交换位置,而是在找到最小的元素时才交换位置。遍历数组的前 n - 1 个元素,从它们及之后的元素中找到最小的元素,与它们交换位置。
数组有 n 个元素,在从第 1 个元素开始的所有 n 个元素中找到最小元素,与第 1 个元素交换位置;在从第 2 个元素开始的所有 n - 1 个元素中找到最小元素,与第 2 个元素交换位置;……;在从第 n - 1 个元素开始的所有 2 个(n - i + 1)元素中找到最小元素,与第 n - 1 个元素交换位置。
插入排序(insertion sort)模拟了人们整理扑克牌的方式: 将数组分为已排序和未排序两部分;从未排序部分取出一个元素,插入到已排序部分的适当位置;初始时已排序部分只有第一个元素。
思路:将数组视为由两个部分组成,已排序部分和未排序部分。从第 2 个元素开始遍历数组元素,逐步将每个待排序的元素插入到已排序部分的合适位置。在每一轮操作中,算法将未排序部分的第一个元素插入到已排序部分中的合适位置。在插入元素时,已排序部分始终保持有序。待到数组未排序部分的元素遍历完毕,数组完全排序。
思路: 两两比较相邻元素,如果反序则交换,直到没有反序为止。
思路:遍历要排序的序列中的每一条记录,让每一条记录的关键字和它后面的每一条记录的关键字两两比较,如果大于,则两条记录交换。在第一次遍历结束后,序列第一个位置处的记录的关键字会变成最小的。在每一次遍历结束后,被遍历位置处的记录跟它右侧的记录相比,它的关键字都是最小的。