数组:
-
数组带来的问题: 额外请求的数组储存空间,请求的位数少不够用,请求的位数多如果用不到会浪费。
速度方面:因为数组是依次排序的,我们想取得指定位置的数组元素,只需要通过简单的数学计算就行。例如:我们要获得a[5]上的元素,我们只需要取得a[0]位置+5即可。所以需要随机获取位置元素时,数组的效率很高 【随机访问】
链表
-
链表:链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
速度方面:链表因为无规则排序,当我们要获得a[5]元素时,我们要先获取a[0]得到a[1]地址,在通过a[1]获得a[2]地址,依次到a[5]。所以在获取所有元素时,链表的效率依然很高,但是如果需要跳跃获取(获取a[3]和a[9]),链表的效率就很低(因为要获取4,5,6,7,8)【顺序访问】
另外,链表擅长删除和插入,只需要修改上个元素的内存地址指向
选择排序(找最大的)
- 对一组数据中依次找到最大的进行排序
- 实例:
网上的
var example = [1, 22, 32, 4, 555, 21, 11, 209, 33, 33]
function selectSort(arr) {
var len = arr.length;
var minIndex, temp;
console.time('选择排序耗时');
debugger
for (i = 0; i < len - 1; i++) {
minIndex = i;
for (j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; //!!主要区别在这里:永远拿最大的数字去找另一个最大的数字!!
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
console.timeEnd('选择排序耗时');
return arr;
}
console.log(selectSort(example));
我写的
const array = [1, 22, 32, 4, 555, 21, 11, 209, 33, 33]
const newarray = [];
//找最大的
function findmax(array) {
for (const x in array) {
let result = true;//定义变量跟踪比较结果
for (const y in array) {
if (array[x] < array[y]) {
result = false
break;
}
}
if (result) {
return x
}
}
}
//一共需要找数组个数的次数
const length = array.length;
for (let x = 0; x < length; x++) {
const maxIndex = findmax(array)
newarray.push(array[maxIndex])
//找到放到第一个
array.splice(maxIndex, 1)
}
console.log(newarray)