這裏先把排序作一個分類,根據是否額外開闢空間分爲內排序和外排序,其中內排序根據操做能夠分爲交換排序、選擇排序、插入排序和周並排序。這是最先會的一種最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
未完待續。。。數組