/** 排序演算法 */
// 需要排序的陣列
let nums = [5, 1 , 2, 3 , 4 , 6, 9, 7, 10, 8];
// let nums = [1,6,5];
class sortclass
/*** quicksort 找出乙個基準值a,把比a小的放入左邊,比a大的放入右邊 可以隨機獲得a;
* 平均時間複雜度為 o(nlogn)
* @param left
* @param right
* @returns
* @memberof sort
*/quicksortf(left,right)
// 把所有比基準值a小的放入a的左側。比基準值a大的放入a的右側
let a = nums[left],l = left,r = right;
while(l < r)
nums[l] = a;
// 對基準值a的左側,重新定義基準值,重複上述操作
this.quicksortf(left,l-1);
// 對基準值a的右側,重新定義基準值,重複上述操作
this.quicksortf(r+1,right);
}/**
* 氣泡排序 相鄰資料兩兩比較,進行交換操作
* 平均時間複雜度為 o(n^2)
* @memberof sortclass
*/bubblesort()}}
}/**
* 選則排序 找出最小值(最大值)放入首位
* 平均時間複雜度為 o(n^2)
* @memberof sortclass
*/selectionsort()}}
}/**
* 插入排序 選定乙個值,從右向左進行查詢,找出第乙個比他要小的資料,放入它的後面
* 平均時間複雜度為 o(n^2)
* @memberof sortclass
*/insertsort()else}}
}/**
* 計數排序 其排序速度快於任何比較排序演算法。當k不是很大並且序列比較集中時,計數排序是乙個很有 效的排序
* 統計陣列nums中每個值為i的元素出現的次數,存入陣列arry的第i項;
* 統計完成後,按順序取出arry裡面的值,重新放入nums
* 時間複雜度是o(n+k)
* @memberof sort
*/countingsort()
arry[nums[i]]++;
}let index = 0,i = 0;
while(index < arry.length)
index++;}}
/*** 基數排序
* 從左到右按位排序, 先排個位, 再排十位,百位... 需要用到計數排序的方法-使用陣列計數
* @memberof sort
*/_radixsort()
// 計數arry
let arrycount = new array(10);
// 儲存新的資料的array
let arrytemp = new array(nums.length);
// let rate = 1;
for(let i = 0;i < t;++i))
// 更具計數值。得到陣列值對應的位置
// total 初始值, 或者計算結束後的返回值。
// item 當前元素
// index 當前元素的索引
arrycount.reduce((total, item, index)=>)
// 最新的結果
for(let i = nums.length - 1;i >= 0;--i)
// 將temp相同位置的值負值給ary, 不能直接 ary = temp
nums = nums.map((item, index)=>arrytemp[index]);
// 之後操作arrytemp等於操作nums
// nums = arrytemp;
rate = rate * (i+1) * 10;
}arrycount = null;
arrytemp = null;
}}
// 排序類
let sortclass = new sortclass();
// quicksort
// let left = 0,right = nums.length - 1;
// sortclass.quicksortf(left,right);
// console.log("quicksortf",nums);
// 氣泡排序
sortclass.bubblesort();
console.log("bubblesort",nums);
// 選擇排序
// sortclass.selectionsort();
// console.log("selectionsort",nums);
// 插入排序
// sortclass.insertsort();
// console.log("insertsort",nums);
排序演算法簡單演算法
1 直接插入排序 把後面未排序部分的首個數插入到前面已排序部分的正確位置上去,直到全部排好順序。直接插入排序是穩定的,演算法時間複雜度o n 2 2 shell排序 將要排序的一組數按某個增量g分成若干組,每組中記錄的下標相差g。對每組中全部元素進行直接插入排序,然後縮小增量g,在每組中再進行排序。...
演算法 常見的排序演算法 簡單排序
常見的一些排序演算法,一些是從書上看的,一些則是參考別人的部落格,從雜亂無章的部落格裡提取實屬不易,多謝理解 直接插入排序演算法的基本思路 把未排序的資料放在乙個已排序好的陣列裡面 演算法名稱 平均時間複雜度 最差時間分析 空間複雜度 穩定度直接插入排序 o n2 o n2 o 1 穩定所有排序方法...
幾個簡單的排序演算法
排序演算法 include using namespace std void insertsort int r,int n 直接插入 void shellsort int r,int n shell排序 void selectsort int r,int n 直接選擇排序 void bubbleso...