1、简单插入排序
/*
* 插入排序
* 从队头到队尾依次从队列中取出一个数,把他插入左侧已经排序的队列中
* 1、从队列中取出一个数,索引为i计为a[i],存入变量t中
* 2、与i的左侧即索引从0到i-1的数依次比较
* 3、如果t比i左侧的某一个数小就把它与t交换
* 4、把通过遍历后的t存入a[i]
*/
private static void insertSort(int[] a) {
// 从头开始遍历
for (int i = 0; i < a.length; i++) {
// 把上一层拿到的数字与从0到i-1依次遍历的数进行比较
for (int j = 0; j < i; j++) {
// 如果a[i]的值比a[j]小就交换他们,直至比较到i-1(因为a[i]在右边,而右边存大的数)
if (a[j] > a[i]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
2、希尔排序
步骤:
1、给出增量(共几组)
2、依次遍历组数(第几组)
3、依次遍历组内元素(第几个元素)
4、把遍历的组内元素运用直接插入排序,插入到组内已排序的序列中
// 希尔排序
public static void ShellSort(int[] arr) {
int l = arr.length;
// 更改组数(共几组)
for (int i = l / 2; i >= 1; i /= 2) {
// 依次遍历组数(第几组)
for (int j = 0; j < i; j++) {
// 依次遍历组内元素(第几个元素)
for (int k = j; k < l; k += i) {
// 把遍历的组内元素运用直接插入排序,插入到组内已排序的序列中
for (int z = j; z < k; z += i) {
// 依次遍历已排序的组内元素,如果组内已排序元素比插入数据大,就交换他们
if (arr[z] > arr[k]) {
int swap = arr[z];
arr[z] = arr[k];
arr[k] = swap;
}
}
}
}
}
}