书名:数据结构与算法图解
作者:[美]杰伊.温格罗 (Jay Wengrow)
排版:小暑署
出版社:人民邮电出版社
出版时间:2019-04-01
ISBN: 9787115509000
知识点:
- 选择排序,每一轮将最小值放到最前,包括比较和交换两步,如果有N个元素,比较步数为N-1项和
,每一轮仅一次交换,交换步数为N-1,时间复杂度为O(n),大O记法忽略常数,一般不包含数字除非是指数,JavaScript代码如代码1
- 大O记法能够区分算法的长期增长率,当数据量达到一定程度时,
,对比图如图1,代码2、3使用Ruby展示了数据取间隔元素,步数分别为1.5N和N,时间复杂度均为O(n).
代码1
function selectionSort(array) {
for (var i = 0; i < array.length; i++) {
var lowestNumberIndex = i;
for (var j = i + 1; j < array.length; j++) {
if (array[j] < array[lowestNumberIndex]) {
lowestNumberIndex = j;
}
}
if (lowestNumberIndex != i) {
var temp = array[i];
array[i] = array[lowestNumberIndex];
array[lowestNumberIndex] = temp;
}
}
return array;
}
图1 时间复杂度对比图
代码2
读取N步,插入N/2步,总计1.5N步,时间复杂度O(n)
def every_other(array)
new_array = []
array.each_with_index do |element, index|
new_array << element if index.even?
end
return new_array
end
代码3
读取N/2步,插入N/2步,总计N步,时间复杂度O(n)
def every_other(array)
new_array = []
index = 0
while index < array.length
new_array << array[index]
index += 2
end
return new_array
end