标签: insertion-sort

Quicksort/Insertion排序组合比Quicksort更慢?

我运行Quicksort 10次,得到平均时间.我对Qicksort/Insertion排序组合做同样的事情,它似乎比quicksort慢.

这是我调用InsertionSort的代码部分

public static <T extends Comparable<? super T>> void OptQSort2 (T[] data, int min, int max) {
        int indexofpartition;
        if(max - min > 0) {
            if( (max - min) <= 10) {
                // Use InsertionSort now
                InsertionSort.sort(data);
                return;
            } else {
                indexofpartition = findPartition(data, min, max);

                OptQSort2(data, min, indexofpartition - 1);

                OptQSort2(data, indexofpartition + 1, max);
            }
        }

}
Run Code Online (Sandbox Code Playgroud)

常规Quicksort与上面的代码片段相同,但没有调用InsertionSort的if条件.

FindPartition如下:

public static <T extends Comparable<? super T>> int findPartition(T[] data, int min, int max) {
    int left, …
Run Code Online (Sandbox Code Playgroud)

java algorithm quicksort insertion-sort

1
推荐指数
1
解决办法
1427
查看次数

第一次迭代开始时循环不变

我正在学习数据结构和算法的基础课程,我们使用的书是CLRS的开创性工作.我在理解循环不变量时遇到一些问题,如第2.1章:插入排序中所述.

这本书说:

在第1-8行的for循环的每次迭代开始时,子目标A [1..j -1]由最初在A [1..j-1]中的元素组成,但是按排序顺序.

现在,这让我很困惑.为什么在第一次迭代开始时它会成立?假设要排序的数组看起来像{5,2,4,6,1,3}.现在,当for循环的第一次迭代开始时,A [1 .. j-1]不是按排序顺序,但是当迭代结束时它就是.

我在这里错过了什么?

algorithm loops invariants insertion-sort loop-invariant

1
推荐指数
1
解决办法
126
查看次数

计算插入排序中的交换数量

这里给出的问题,我必须计算总数.使用插入排序对数组进行排序时所需的交换.
这是我的方法

#include <stdio.h>
int main()
{
    int t, N, swaps, temp, i, j;
    scanf("%d", &t);

    while(t--){
        scanf("%d", &N);

        int arr[N];
        swaps = 0;

        for(i=0; i<N; ++i){

            scanf("%d", &temp);

            j=i;
            while(j>0 && arr[j-1] > temp){
                arr[j] = arr[j-1];
                ++swaps;
                --j;
            }

            arr[j] = temp;
        }
        printf("%d\n", swaps);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,这个soln超出了时间限制.

我怎样才能让它更快?
而且,这个问题的其他更好的解决方案是什么?

c algorithm optimization swap insertion-sort

1
推荐指数
1
解决办法
8776
查看次数

插入排序有什么问题?

我正在尝试使用基于插入的排序算法对大型数据文件进行排序,代码运行正常,但输出不正确.我一遍又一遍地研究它完全无济于事,谁能看到我出错的地方?

public void sort(Comparable[] items) {
    for (int i = 1; i < items.length; i++) {
        Comparable temp = items[i];
        int j = i - 1;
        while (j >= 0 && items[j].compareTo(items[j]) > 0) {
            items[j + 1] = items[j];
            j = j - 1;
        }
        items[j] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

我制作的一个示例数据文件是......

2
1
3
5
9
6
7
4
8
Run Code Online (Sandbox Code Playgroud)

显然输出应该是1,2,3,4 ... - 但我得到1 3 5 9 6 7 4 8 8

java sorting algorithm insertion-sort

1
推荐指数
1
解决办法
109
查看次数

为什么我们不能在插入sort的while循环中更改语句的顺序?

如下所示是学校教授的基本插入排序算法.如果更改while循环参数的顺序,则不起作用.

public static int[] insertionSort(int[] A){
    for(int i =1; i<A.length;i++){
        int key = A[i];
        int j = i;
        while(j>0&&A[j-1]>key){
            A[j]=A[j-1];
            j--;
        }
        A[j]=key;
        }       
    return A;
}
Run Code Online (Sandbox Code Playgroud)

更改后(现在代码不会工作,它将给出java.lang.ArrayIndexOutOfBoundsException:-1 expection):

public static int[] insertionSort(int[] A){
    for(int i =1; i<A.length;i++){
        int key = A[i];
        int j = i;
        while(A[j-1]>key&&j>0){
            A[j]=A[j-1];
            j--;
        }
        A[j]=key;
        }       
    return A;
}
Run Code Online (Sandbox Code Playgroud)

如果有任何其他方法来实现相同的算法,以便条件循环语句的顺序无关紧要?

java sorting algorithm insertion-sort

1
推荐指数
1
解决办法
106
查看次数

使用Insertion Sort按排序顺序返回数组的k个最小元素

我正在准备软件开发人员的工作面试和复习算法问题.我无法弄清楚如何修改插入排序算法,以便它按排序顺序返回大小为n的数组的k个最小元素.

插入排序算法

for i = 1 to n
  j = i
  while j > 0 and A[j-1] > A[j]
    swap A[j] and A[j-1]
    j = j - 1
Run Code Online (Sandbox Code Playgroud)

在算法结尾添加for循环以获取前k个元素不计算在内.

sorting algorithm insertion-sort

1
推荐指数
1
解决办法
238
查看次数

C++插入排序崩溃

我创建一个向量并用随机整数填充它.然后我打印出所有未排序的值并调用insertionSort().在此调用之后,应按排序顺序打印数字.我的程序一直在崩溃,我不知道为什么.

这是我的代码:

#include <cstdlib>
#include <iostream>
#include <vector>
#include <time.h>

using namespace std;

int listSize;

vector<int> intList()
{
    cout << "How many numbers do you want to sort?\n";
    cin >> listSize;
    vector<int> list;
    for (int i = 0; i < listSize; i++)
    {
        int random = rand() % 10001;
        list.push_back(random);
    }

    return list;
};

void insertionSort(vector<int>& data)
{
    int i, j, tmp;

    for (i = 1; data.size(); i++)
    {
        j = i;
        tmp = data[i];
        while (j > …
Run Code Online (Sandbox Code Playgroud)

c++ vector insertion-sort

1
推荐指数
1
解决办法
68
查看次数

让声明错误

我有以下haskell语句的问题:

insertSort3 xs =
    let sort3 [] ys = ys
         sort3 (x:xs) ys = sort3 xs (insert x ys)
    in sort3 xs []
Run Code Online (Sandbox Code Playgroud)

我的编译器说:在输入'='上解析错误(错误发生在第三行).

sorting haskell insertion-sort

1
推荐指数
1
解决办法
53
查看次数

为什么此插入排序会返回超出范围异常的索引?

出于某种原因,下面的C#插入排序代码返回索引超出范围异常.我会尝试将每个变量写出到控制台,但异常并没有让我这么做.我找不到解决方案,所以帮助升值.

using System;
using System.Collections.Generic;

class MainClass {
    public static void Main (string[] args) {
        int[] unsortedArray = {23, 19, 21, 44, 40, 60, 73, 80, 38, 55, 29, 78, 83, 61, 63, 9, 93, 6, 51, 11};
        //Sets the unsorted list

        Console.WriteLine ("Insertion Sort");
        for (int i = 0; i < 20; i++) {
          Console.Write(unsortedArray[i] + " , ");
        }
        //Displays a welcome message and the unsorted list

        Console.WriteLine();
        Console.WriteLine();
        //Makes a gap between the unsorted and sorted list …
Run Code Online (Sandbox Code Playgroud)

c# insertion-sort

1
推荐指数
1
解决办法
75
查看次数

反向排序数组的插入排序非常快

我要疯了。我有4种排序算法的测试用例(气泡排序,选择排序,插入排序和合并排序)

我测试了有序数组,反向有序数组和随机数组。在每种情况下,插入排序都非常快。我测试了1k,5k和25k的数字。插入排序一定不能比合并排序快吗?对?(顺便说一句,在随机数数组的情况下,插入排序仍然更快,对于我的代码,插入排序始终是最快的算法。这肯定是错误的,但是哪里错了。。(我共享了所有代码)

Test Case for 1k Reversed Ordered Array: (in milis)

Bubble Sort run time: 512
Selection Sort run time: 154
Insertion Sort Run time: 1
Merge Sort run time: 19


test case for 5k reversed ordered number (in milis):

Bubble Sort run time: 11768
Selection Sort run time: 3613
Insertion Sort Run time: 4
Merge Sort run time: 100

Test Case for 25 k reversed ordered array

Bubble Sort run time: 303249
Selection Sort run time: 90469
Insertion Sort …
Run Code Online (Sandbox Code Playgroud)

python arrays insertion-sort

1
推荐指数
1
解决办法
37
查看次数