【问题标题】:Running Time of Algorithms Hackkerrank insertion sort problem算法的运行时间 Hackerrank 插入排序问题
【发布时间】:2019-10-29 18:27:07
【问题描述】:

任务是输出对数组进行排序所需的移位次数。 我的代码:

function runningTime(arr) {
    var count=0;
    var temp;
    for(var i=1 ; i<arr.length; i++){
        for(var j=0 ; j<i; j++){
            if(arr[j]>arr[i]){
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
                count++;
            }
        }
    }
    return count;

}

console.log(runningTime([4, 4, 3, 4]));

它没有通过这个样本测试:4 4 3 4。 预期输出为 2 ,我的返回 1 , 为什么它应该返回 2 ?我错在哪里?

这里是问题的链接:insertion sort hackerrank problem

【问题讨论】:

  • 这看起来像冒泡排序,而不是插入排序。
  • 啊。你的比较是错误的。您需要将arr[j]arr[j+1] 进行比较,而不是arr[i]
  • 是的,谢谢。明白了。

标签: javascript time insertion-sort


【解决方案1】:

您的代码不是插入排序。 插入排序的思想是尝试搜索 i 之前的最后一个位置且不小于 i 的 j 并将它们交换。每个值大于 i 都是一次移位。 试试这个。

function runningTime(arr) {
    var count = 0;
    var temp;
    for (var i = 0; i < arr.length; i++) {
        let pos = i;
        for (var j = i; j >= 0; j--) {
        if (arr[j] > arr[i]) {
            pos = j;
            count++;
        }
        }
        var temp = arr[pos];
        arr[pos] = arr[i];
        arr[i] = temp;
    }
    return count;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多