- 冒泡排序(雙for,左比右)
冒泡排序是比較任何兩個(gè)相鄰的項(xiàng)。如果第一個(gè)比第二個(gè)打,則交換他們。元素項(xiàng)向上移動至正確順序,就好像氣泡升至表面一樣,因此得名
let arr = [1, 66, 95, 25, 18, 8, 41, 88, 4, 37, 6, 72];
function arrsort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
let first = arr[j];
let last = arr[j + 1];
let value = 0;
if (first > last) {
value = first;
arr[j] = arr[j + 1];
arr[j + 1] = value;
}
}
}
return arr
}
window.alert(arrsort(arr))
//創(chuàng)建一個(gè)數(shù)組來表示待排序和搜索的數(shù)據(jù)結(jié)構(gòu)
function ArrayList() {
var arr = [];
this.insert = function (item) {//創(chuàng)建一個(gè)插入方法向數(shù)據(jù)結(jié)構(gòu)中添加元素,生成一個(gè)新的數(shù)組
arr.push(item)
}
this.toString = function () {//將數(shù)組中的元素拼接成一個(gè)字符串
return arr.join()
}
this.bubbleSort = function bubbleSort() {//創(chuàng)建一個(gè)冒泡排序的函數(shù)
var length = arr.length;
for (let i = 0; i < length; i++) {//從數(shù)組的最后一位迭代至最后一位,決定數(shù)組中進(jìn)行了多少輪排序,輪數(shù)和數(shù)組長度一致
for (let j = 0; j < length - 1; j++) {//從第一位迭代至倒數(shù)第二位,進(jìn)行的是當(dāng)前項(xiàng)和下一項(xiàng)的比較
if (arr[j] > arr[j + 1]) {//比較兩項(xiàng)的大小
swap(arr, j, j + 1)//調(diào)用一個(gè)函數(shù),順序如果不對就交互他們的位置
}
}
}
}
//冒泡排序改進(jìn),減去循環(huán)中已跑過的輪數(shù)
this.modifiedBubbleSort = function(){
var length = arr.length;
for(let i = 0 ;i<length;i++){
for(let j = 0 ;j<length-1-i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1)
}
}
}
}
}
var swap = function (arr, index1, index2) {
var aux = arr[index1];
arr[index1] = arr[index2];
arr[index2] = aux;
}
function creatNonSortedArray(size) {
var arr = new ArrayList();
for (var i = size; i > 0; i--) {
arr.insert(i)
}
return arr
}
var arr = creatNonSortedArray(8);
console.log(arr.toString())
arr.modifiedBubbleSort()
console.log(arr.toString())
2.快速排序