1.直接插入排序
原理:
將待排序的一個(gè)元素插入到已排好序的數(shù)組中莹捡,插入過(guò)程的原理是:記錄下待插入的元素的值鬼吵,然后在已排好序的數(shù)組中扣甲,從后往前篮赢,將比這個(gè)數(shù)字大的元素往后移一個(gè)位置齿椅,依次循環(huán),最終启泣,空出來(lái)一個(gè)位置涣脚,就是待插入元素該放的位置
javascript算法實(shí)現(xiàn)
function InsertSort(arr) {
for (var i = 1; i < arr.length; i++) {
var x = arr[i]
var j = i - 1;
while(arr[j] > x && j > -1){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = x;
}
console.log(arr);
}
算法分析
插入排序是穩(wěn)定的(如何遇見(jiàn)相同的值,這個(gè)值是不會(huì)往前移動(dòng)一位的)
插入排序的事件復(fù)雜度是O(n*n)
2.簡(jiǎn)單選擇排序
原理:
從整個(gè)數(shù)組中遍歷一遍寥茫,選擇其中最小的一個(gè)值遣蚀。然后,將這個(gè)值放在第一個(gè)位置上纱耻,第二次遍歷芭梯,從待排序的數(shù)組中選擇最小的一個(gè)放在第二個(gè)位置上,依次循環(huán)n-1次弄喘,最終得到排好序的數(shù)組
javascript算法實(shí)現(xiàn)
// 選擇排序
function select(arr){
for (var i = 0;i < arr.length-1;i++) {
var min = arr[i];
var minIndex = i;
var temp;
for (var j = i + 1;j < arr.length;j++) {
if (arr[j] < min) {
min = arr[j];
minIndex = j;
}
}
if (minIndex != i) {
temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
console.log(arr);
}
算法分析
通常該算法被認(rèn)為是不穩(wěn)定的玖喘,但是可以改進(jìn)使之變成穩(wěn)定的,
同時(shí)蘑志,也可以經(jīng)過(guò)改進(jìn)累奈,使得其時(shí)間復(fù)雜度降低
上述算法的事件復(fù)雜度是O(n*n)
3.冒泡排序
原理:
在要排序的一組數(shù)中,對(duì)當(dāng)前還未排好序的范圍內(nèi)的全部數(shù)急但,自上而下對(duì)相鄰的兩個(gè)數(shù)依次進(jìn)行比較和調(diào)整澎媒,讓較大的數(shù)往下沉,較小的往上冒波桩。即:每當(dāng)兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時(shí)戒努,就將它們互換。
javascript算法實(shí)現(xiàn)
// 冒泡排序
function mao(arr){
var temp;
for (var i = arr.length - 1; i > 0; i--) {
for (var j = 0; j < i; j++){
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
}
算法分析
冒泡排序是穩(wěn)定的
冒泡排序的時(shí)間復(fù)雜度是O(n*n)
大神寫的總結(jié)鏈接:http://blog.csdn.net/hguisu/article/details/7776068