概念
1、排序的概念
排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。平时的上下文中,如果提到排序,通常指的是排升序(非降序)。通常意义上的排序,都是指的原地排序(in place sort)。
2、排序的分类
排序分为比较排序和非比较排序,比较排序就是根据数据本身的大小关系来比较进行排序。而非比较排序是利用一些数据结构,给定特殊的规则,从而达到排序的效果,但是数据之间并没有经过比较这一过程。这两种大的排序方式又可以分成许多小种类的排序方式,例如:比较排序有我们之前就了解过的冒牌排序、堆排序等等;非比较排序有计数排序、基数排序、桶排序等等。
3、排序的性能分析
我们可以根据排序的时间复杂度和空间复杂度和排序的稳定性三个方面来分析一种排序方式的好坏。
稳定性定义:两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,且排序过程中元素没有发生跳跃性互换,则我们称该算法是具备稳定性的排序算法。
一、插入排序
1、直接插入排序
直接插入就是把一组数据分为有序段和无序段,然后把无序段的第一个数据插入有序段中。
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 if (array[j] < tmp){
break;
}
}
array[j+1] = tmp;
}
}
2、折半插入排序(了解)
折半插入排序是插入排序的优化
public static void bsInsertSort(int