1. 氣泡排序
思想:比較相鄰的兩個元素,如前乙個比後乙個大,則交換位置
第一輪的最後乙個元素應該是最大的元素
按照步驟1的方法比較相鄰兩個元素,這個時候因為最後乙個元素已經是最大的了,所以最後乙個元素不用比較
總共比較 n-1次
雙重迴圈,所以平均複雜度和最壞的複雜度均是是o(n^2),最好的情況是已經排好序的,所以只遍歷一次就可以了,所以是o(n)
**function sort(arr) }}
}var arr = [3,1,5,7,2,4,9,6]
console.log('排序前:'+arr);
sort(arr)
console.log('排序後:'+arr);
2. 快速排序
快排的思想:
通過一趟排序將待排記錄分成獨立的兩個部分,左邊元素均比樞紐元素小,右邊元素均比樞紐元素大,之後再對這兩部分繼續排序,直到整個序列有序。(面試有問到)
其實該排序有三種思路,以下的**是第三種思路,也就是根據阮一峰老師的思路寫的
function sort(arr)
var mid = parseint(arr.length / 2)
var left = ,right =
var pivot = arr.splice(mid,1)[0]
arr.foreach(item => else
})return sort(left).concat([pivot],sort(right))
}var arr = [3,1,5,7,2,4,9,6]
console.log('排序前:'+arr);
console.log('排序後:'+sort(arr));
該方法並不是原地排序。並沒有改變原陣列,而是將排好序的元素組返回成乙個新陣列。
若想改變元素組,可以採取第一種思路,雙指標
function sort(arr, from, to)
while (i < j && arr[i] < pivot)
if (i < j)
}[arr[i], pivot] = [pivot, arr[i]]
sort(arr, from, i-1)
sort(arr, i + 1, to)
}var arr = [3, 1, 5, 7, 2, 4, 9, 6]
console.log('排序前:' + arr);
sort(arr,0,arr.length-1)
console.log('排序後:' + arr);
時間複雜度最好和平均均為o(nlgn),最壞為o(n^2)
3. 選擇排序
時間複雜度均為o(n^2)
var arr = [3,5,8,5,2,9]
var index = 0
for(var i = 0;iindex = i
for(var j = i+1;jif(arr[j] < arr[index])
}// 如果沒變的話,那就不用交換
if(index !== i)
}console.log(arr);
JS排序演算法
function insertsort arr endif status new date st ms return arr function shellsort arr while increment 1 status new date st ms return arr function shel...
排序演算法(JS)
自己整理一下資料結構的排序演算法,用js寫了一下,測試正確。插入排序 var table 32,26,87,72,26,17 for var i 0 i 0 temp0 alert i table 快速排序 快速排序是找出乙個元素 理論上可以隨便找乙個 作為基準 pivot 然後對陣列進行分割槽操作...
js排序演算法
常見內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排序 堆排序 技術排序等 從第乙個元素開始,該元素被當成已排序 取出下乙個元素,在已排序的元素序列中從後向前掃瞄 如果該元素大於新元素,將該元素移到下一位置 重複3步驟,直到找到已排序的元素小於或者等於新元素,將新元素插入到...