内部排序定义:
插入类:将无序子序列的一个或者几个记录’插入’到有序序列中,从而增加记录的有序子序列的长度
1.1 直接插入排序—>顺序查找
1.2 折半插入排序—>基于折半查找
1.3 希尔排序--------->基于逐趟缩小增量
图:(插入排序)(注:图是大佬的,传送门在下边)
const name = '1.1-插入排序-算法类语言';
viod InserSort (RecordList L){
for(i=2;i<L.length;i++){
L.r[0] = L.r[i];//设置监视哨
for(j = i-1;L.r[0].key < L.r[j].key;j--)
L.r[j+1] = L.r[j];//记录后移
L.r[j+1] = L.r[0];//插入到正确位置
}
}
```c
//代码待添加
交换类:通过’交换’无序子序列中的记录从而得到其中关键字最小或最大的记录,并将它加入到有序子序列中,从而增加记录的有序子序列的长度。
2.1 冒泡排序
2.2 快速排序
图:冒泡排序
let name = '2.1-JavaScript-冒泡排序';
var arr1 = [46,25,68,33,33,19,12,80];
//bubble-sort
function sortBubble(array){
let num = 0;
for(var i=0;i<array.length -1;i++){
for(var j=0;j<array.length - i -1;j++){
num++;
if(array[j]>array[j+1]){
var tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
console.log('执行了'+num+'次')
};
console.log(array);
return array;
}
sortBubble(arr1)
char name = '2.1-Java-冒泡排序';
public class BubbleSort {
public static int[] bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return arr;
}
//此处可以用
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length -i - 1; j++) {
if (arr[j + 1] < arr[j]) {
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
return arr;
}
)
在这里插入代码片
选择类:从记录的无序子序列中’选择’关键字最小或最大的记录,并将它加入到有序子序列中,从而增加记录的有序子序列的长度
3.1 简单选择排序
3.2 树形选择排序
3.3 堆排序
图:选择排序
在这里插入代码片
归并类:通过’归并’两个或两个以上的记录有序子序列,逐步增加记录有序子序列的长度
4.1 二路归并排序
4.2 自然归并排序
讲解的贼经典的算法地址-大佬传送门