这里先把排序作一个分类,根据是否额外开辟空间分为内排序和外排序,其中内排序根据操做能够分为交换排序、选择排序、插入排序和周并排序。这是最先会的一种最low的排序方式,也属于交换排序javascript
function theLowestSort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
复制代码
// 冒泡排序属于交换排序 基本思想为相邻两两比较 后者小于前者则交换 这样小值一步一步交换到前列
function bubbleSort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = arr.length - 1; j >= i; j--) {
// 最后一位开始 依次与相邻元素比较和交换
// 注意:永远是相邻元素!才是冒泡
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
复制代码
// 简单选择排序属于选择排序 基本思想为每次遍历都找出当前循环的最小项与第i位置元素交换 其交换次数远小于冒泡排序 因此效率高于冒泡
function simpleSelectionSort(arr) {
for (var i = 0; i < arr.length; i++) {
var min = i; // 因为i从0开始 先定义最小值是i
for (var j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j; // 每当有元素更小 就用下标刷新min值
}
}
if (i !== min) {
var temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
复制代码
// 直接插入排序属于插入排序 将数组分为两部分 前半部分有序 后半部分无序 依次选择无序部分第一项与前面有序部分比较 找到合适位置插入
function straightInsertionSort(arr) {
// 假设第0个元素单独为有序 因此从第1个元素开始
for (var i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
var guard = arr[i]; // 当前项比前一项小 计划前移 先作一个标记
var j = i - 1;
arr[i] = arr[j]; // 前一项赋值到当前项 这是当前项挨个往前比较的开端
while (j >= 0 && guard < arr[j]) {
// 挨个往前比较 当前项比前一项大时跳出循环
arr[j + 1] = arr[j]; // 从后往前遍历 每一项都日后一项赋值 总体后移
j--;
}
arr[j + 1] = guard; // 标记赋值到当前项 因为while循环中j-- 须要j+1给加回来 即当前项arr[i]
}
}
}
复制代码
以上1 2 3三种排序时间复杂度都是java
未完待续。。。数组