常见的排序算法有很多种,他们的原理并不难,但是很多朋友都容易记混,在面试、考试时一时间去分不清楚,那不就吃大亏了嘛
(一)插入排序
插入排序的精髓是,假定前面都已经排好序了,新元素在这个已经排好序的队列里,找到自己的位置,并插入进去,有点像插队,这个就叫插入排序。
看图理解一下:
(二)希尔排序
希尔排序不好从名字上进行记忆,需要多花一点精力。
排序也是一样的要分组,只不过这次分组不是邻居一组,而是等距离元素为一组。
比如[1 2 3 4 5 6 7 8 9 10] 等距为5分组:[1 6] [2 7] [3 8] [4 9] [5 10]
每组内部从小到大排好后,再分组。新的距离是上次的一半:2.
排序,分组,新距离:1;
排序结束。
(三)选择排序
这个排序的主观性很强,你可以理解为你站在他们面前,挑选n次,每次都逐个挑选出最小的。
这样的排序是“你”选择的结果,所以是“选择排序”。
(四)冒泡排序
冒泡,联想到在水中升起来的泡泡,距离水面越近泡泡体积最大,也就是说,大泡泡往上走。冒泡排序,就是最大的值一直向后走的排序。
(五)堆排序
这个排序涉及二叉树,肯定就非常好记忆啦。
常见的有大根堆(升序)和小跟堆(降序)。默认为升序。
(六)快速排序
这个排序算法像是一刀切,有大有小的数字乱放在地上,一声令下:小的去左边,大的去右边!
然后在左边和右边继续喊:小的在左,大的在右!
直到每个小单元里都只有一个元素。