先粗知一下各個算法及其複雜度 ,咱們這裏所說的排序算法就是數據結構裏邊的,學過數據結構的確定知道他們的原理。咱們不細說原理,直接講述下代碼.用的時候直接用sort便可 算法
時間複雜度和空間複雜度計算方式不用我說了吧這個比較簡單,相鄰兩個數據比較,就是至關於大水泡在一層層上升,因此是冒泡排序數組
export default (arrays) => {
for (let i = 0; i < arrays.length - 1 ; i++) {
//內層循環是當前趟數須要比較的次數
for (let j = 0; j < arrays.length - i - 1; j++) {
//前一位與後一位與前一位比較,若是前一位比後一位要大,那麼交換
if (arrays[j] > arrays[j + 1]) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
}
}
}
}
複製代碼
選擇排序也是兩層for循環,就是至關於遍歷數組全部元素,取出當前遍歷元素的最小值給遍歷初始元素,與冒泡排序不一樣的是,選擇排序是遍歷獲取最小值而後排序,冒泡是在不斷的置換相鄰元素順序。bash
export default (arrays) => {
for (let i = 0; i < arrays.length; i++) {
let min = arr[i];
//內層循環是當前趟數須要比較的次數
for (let j = i+1; j < arrays.length; j++) {
//前一位與後一位與前一位比較,若是前一位比後一位要大,那麼交換
if (arrays[j] < min) {
let temp = min;
min = arrays[j];
arrays[j] = temp;
}
}
arr[i]=min;
}
return arrays;
}
複製代碼
問題:最大間距,即求排序數組相鄰元素之間最大的差值。
常規作法思路: 首先經過sort排序,而後遍歷求差值,比較便可,這種性能不是最優解,由於重複遍歷!
個人算法思路: 在經過冒泡排序和選擇排序的每一次遍歷時,能夠得到一個相鄰元素之間的差值,便可以在排序過程當中進行差值比較,減小一次遍歷過程。
代碼數據結構
export default (arrays) => {
if(arrays.length<2){
return 0;
}
for (let i = 0; i < arrays.length - 1 ; i++) {
//內層循環是當前趟數須要比較的次數
for (let j = 0; j < arrays.length - i - 1; j++) {
//前一位與後一位與前一位比較,若是前一位比後一位要大,那麼交換
if (arrays[j] > arrays[j + 1]) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
}
}
let temp =math.abs(arrays[length-2-i]-arrays[length-1-i];
if(temp>max){
max = temp;
}
}
return max;
}
複製代碼