排序(基本概念及分类,直接插入排序和希尔排序)

排序的概念

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次
序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排
序算法是稳定的;否则称为不稳定的。两个数相等时,第一个数排序前在另外一个数之前,拍完序之后还在另外一个数之前。

内部排序:数据元素全部放在内存中的排序。

外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

常见的几大类排序

排序(基本概念及分类,直接插入排序和希尔排序)
基数排序,数据约束比较明显,这七种排序比较通用

插入类排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一
个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列

每次遍历到一个数,找到前面小于等于它时候的位置

			因为前面已经排好的全部时有序数列,最大的数已经时有序数列中最后的那个数
			如果正好和前一个数相等或者大于前一个数,则直接end+1回到待排序数的下标,等于key
			i跳到下一个数继续判断
			如果小于的话,往后移动,则从end下标开始,遍历整个有序数列,
			找到key>某个数的时候,直接让end+1=key,原来的end+1位置的数已经移动到end+2位置
			所以直接让直接让end+1=key,完成插入,
			如果end=-1表示,有序数列中最小的数都比key小,则end+1下标回到0,数组第一个元素的位置就是key

排序(基本概念及分类,直接插入排序和希尔排序)
希尔排序为了解决直接插入排序的一些缺点,希尔排序,通过分组的方法,让数据在每次进行直接插入排序的时候都是接近有序的。对直接插入排序进行更改。

以前直接插入时,end+1,其实就是希尔排序中分组间隔为一时候的情况
现在,有分组间隔,所以每回在组内搬运元素,每回end+分组间隔gap就行

每个小组排完序后数组接近有序,分组间隔减一,再排序,最后一次插入排序,整个数组接近有序
最后一次插入排序,整个数组接近有序,直接插入最快

排序(基本概念及分类,直接插入排序和希尔排序)