各算法时间复杂度
先粗知一下各个算法及其复杂度 ,我们这里所说的排序算法就是数据结构里边的,学过数据结构的肯定知道他们的原理。我们不细说原理,直接讲述下代码.用的时候直接用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循环,就是相当于遍历数组所有元素,取出当前遍历元素的最小值给遍历初始元素,与冒泡排序不同的是,选择排序是遍历获取最小值然后排序,冒泡是在不断的置换相邻元素顺序。
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;
}