书名:数据结构与算法图解
作者:[美]杰伊.温格罗 (Jay Wengrow)
出版社:人民邮电出版社
出版时间:2019-04-01
ISBN: 9787115509000
知识点:
- 插入排序:步骤包括移出、比较、平移、插入,移出和插入每一轮均为1步,总计2N-2步,比较,从第二个索引开始右滑,左比较,总和
,平移,如果是完全逆序,步数则和比较相同为
,时间复杂度为
,大O只保留最高阶的N,大O比较图如图1,选择算法python代码如代码1
- 代码2和代码3展示了两个数组求交集的算法,代码2时间复杂度为
,代码2时间复杂度介于
和
之间
代码1
分最坏情况,最好情况,平均情况讨论:
[4,3,2,1][1,2,3,4][1,3,4,2]
最好情况[1,2,3,4] 比较3次 平移0次
最坏情况[4,3,2,1] 比较6次 平移6次
平均情况[1,3,4,2] 比较5次 平移2次
def insertion_sort(array):
for index in range(1, len(array)):
position = index
temp_value = array[index]
while position > 0 and array[position - 1] > temp_value:
array[position] = array[position - 1]
position = position - 1
array[position] = temp_value
图1 时间复杂度对比
代码2
function intersection(first_array, second_array) {
var result = [];
for (var i = 0; i < first_array.length; i++) {
for (var j = 0; j < second_array.length; j++) {
if (first_array[i] === second_array[j]) {
result.push(first_array[i]);
}
}
}
return result;
}
代码3
function intersection(first_array, second_array) {
var result = [];
for (var i = 0; i < first_array.length; i++) {
for (var j = 0; j < second_array.length; j++) {
if (first_array[i] === second_array[j]) {
result.push(first_array[i]);
break;
}
}
}
return result;
}