時間複雜度 是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。比如有有乙個陣列,他的長度為n,進行排序,每迴圈一次把最大的放在最後面,時間複雜的就為(n+(n-1)+(n-2)+…+1)*c=an2+bn+c ,有上述定義知它的時間複雜度就為 n2。
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。比如直接插入排序的時間複雜度是o(n^2),空間複雜度是o(1) 。
排序的穩定性:原始無序序列想要變為有序系列,原始序列中值相同的元素排成有序序列後,相對位置保持不變,那麼這個排序就是穩定的。
最優解:先滿足時間複雜度為最優,再使用最少空間複雜的。
1、泡排排序
function bubblesort(data)
} }return data;
}
2、插入排序
原理:在乙個序列中,假設第一位為有序序列,從後往前逐個進行比較,找出插入位置,將該元素插入到有序數列的合適位置中,每迴圈一次,把最小的放在最前面。時間複雜度為o(n2),空間複雜度為o(1)。
**:
function insertsort(data)
} return data;
}
3、選擇排序
原理:假設第0位為最小值,與後面的數進行比較,誰小就讓最小值指向這位。第一次迴圈結束,交換第0位和最小值指向的哪位。最小值就在最前面。時間複雜度為o(n2),空間複雜度為o(1)。
**:
function selectionsort(data)
var middle = math.floor(len / 2),
left = array.slice(0, middle),
right = array.slice(middle);
return merge(mergesort(left), mergesort(right));
}function merge(left, right)
else
} while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
return result;
}
5、快速排序
原理:先從數列中取出乙個數作為基準數。 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。 再對左右區間重複第二步,直到各區間只有乙個數。時間複雜度o(logn),額外空間複雜度o(1);
**:
function quicksort(arr)
else
} return quicksort(left).concat(pivot,quicksort(right));
}
經典排序演算法
排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...
經典排序演算法
1 氣泡排序 bubble sort 最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。...
經典排序演算法
思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...