目录
一.排序的概念及引用
排序:所谓排序,就是使一串记录,按照其中某个或某些关键字的大小,递增或递减排列起来的操作
稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j之前,则称这种排序算法是稳定的;否则称为不稳定的。
内部排序:把数据全部加载到内存上进行排序
外部排序:数据太多内存不能进行排序,u盘,磁盘.....
二.常见排序算法的实现
1.插入排序
基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列(实际中玩扑克就用了排序的思想)
1.1 直接插入排序
当插入第i个元素时,前面的array[0],ar0ray[1]....array[i-1]已经排好序了,此时用array[i]的数值与array[i-1],array[i-2]....进行比较,找到插入位置将array[i]插入,原来位置上的元素后移
public static void insertSort(int[] array) {
for (int i = 1; i < array.length; i++) {
int tmp = array[i];
int j = i - 1;
for (; j >= 0; j--) {
if (array[j] > tmp) {
array[j + 1] = array[j];
} else {
break;
}
}
array[j + 1] = tmp;
}
return;
}
特点:1元素集合越接近有序,直接插入排序算法时间效率更高
2.时间复杂度O(n^2)
3.空间复杂度O(1)
4.稳定性:稳定
1.2 希尔排序(增小缩量排序)
基本思想:先选定一个整数,把待排序数组中所有记录分成个组,所有记录为的记录分在同一组内,并对每一组内的记录进行排序,然后重复上述工作,直到gap&#