我对数据结构和算法很陌生。我刚刚实现了一个插入排序算法。我只想确定我的代码是否正常。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] test = {40, 1, 5, 0, 9};
for (int i = 0; i < test.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (t
我正在尝试用Java语言编写一个版本的timSort,它使用array.length < 10之后的插入,否则使用合并排序。假设我对insertionSort和merge的调用是正确的,是什么使下面的代码不会命中插入、排序和正确的timSorting? /**
* timSort is a generic sorting method that sorts an array of Comparable data
* using the TimSort algorithm. Make sure this method is public so that we can
* test
我正在尝试理解3向基数快速排序,我不明白为什么那里有截断变量?那插入的方法呢?
public class Quick3string {
private static final int CUTOFF = 15; // cutoff to insertion sort
// sort the array a[] of strings
public static void sort(String[] a) {
// StdRandom.shuffle(a);
sort(a, 0, a.length-1, 0);
as
我试图在Java中实现一种高效的排序算法。出于这个原因,我还实现了快速排序,并使用了以下代码:
public class Sorting {
private static Random prng;
private static Random getPrng() {
if (prng == null) {
prng = new Random();
}
return prng;
}
public static void sort(int[] array) {
sortInte
通过理解插入排序算法,我编写了这段代码。我的老师说它是冒泡排序,但我的朋友说它是插入的。有没有人可以检查一下并向我简要介绍一下。
#include <stdio.h>
void sort(int n) {
int i, j;
float arr[n], k;
for (i = 0; i <= n - 1; i++) {
printf("Enter the number");
scanf("%f", &arr[i]);
}
for (i = 1; i <= n - 1; i++) {
j
根据
在小型阵列上使用插入sort...for调用(即长度小于实验确定的阈值k)。这可以通过简单地在只剩下小于k个元素时停止递归来实现,使整个数组k排序:每个元素最多只在k个位置远离其最终位置。然后,一个插入排序传递在O(k×n)时间内完成排序。
我不确定我的理解是否正确。一种包括多次调用插入排序的方法是
quicksort(A, i, k):
if i+threshold < k:
p := partition(A, i, k)
quicksort(A, i, p - 1)
quicksort(A, p + 1, k)
else
inse
我想知道有没有人能帮我?我有一个简单的2/3行代码,可以通过Python调用另一个函数,但似乎无法理解。原始的quicksort2工作,插入排序工作,但是--对函数的调用不起作用(它们位于同一个目录中)--有人知道该怎么做吗?谢谢。我会把这两个代码都贴在下面。
赋值明确规定:,当n个≤16时,Quicksort2将不对列表进行分区,而是调用插入排序。这意味着我需要一个简单的if-elif语句在我的快速排序2函数中,但是无法确定该做什么。
# insertion sort function for an array
def insertion_sort(array_values):
下面是插入排序的原始伪码:
function INSERTIONSORT(A[0..n−1])
for i←1 to n−1 do
j←i−1
while j≥0 and A[j+1]<A[j] do
SWAP(A[j+1],A[j])
j←j−1
一家公司在他们的产品中使用插入排序。您是该公司聘请的网络安全专家,负责评估其代码的任何安全缺陷。经过几次尝试,您成功地攻击了它们的插入排序代码,并以下列方式修改了它们:
function INSERTIONSORT(A[0..n−1])
for i←1 to n
因此,对于拆分时的合并排序,我将使用
HGFEDCBA
HG FE DC BA
H G F E D C B A
用于合并,而不是
GH EF DC AB
EFGH ABCD
ABCDEFGH
好呀
H G F E D C B A
GH F E D C B A
FGH E D C B A
EFGH D C B A
DEFGH C B A
CDEFGH B A
CBDEFGH A
ABCDEFGH
我能想到的唯一一件事是,合并排序通常是递归实现的,如果使用递归进行拆分,使用第一种方法合并会更容易。
V8对长度超过10个元素的数组使用快速排序,对于小于该长度的数组使用插入排序。这是
function InnerArraySort(array, length, comparefn) {
// In-place QuickSort algorithm.
// For short (length <= 10) arrays, insertion sort is used for efficiency.
我想知道为什么不使用shell排序而不是插入排序?我知道,对于一个由10个元素组成的数组来说,这可能没有什么区别,但仍然如此。有什么想法吗?
如果数组长度小于某个阈值,Java6在Arrays.java中的合并排序实现将使用插入排序。这个值被硬编码为7。由于算法是递归的,对于大型数组,这种情况最终会发生很多次。规范的并不这样做,只是一直使用merge-sort,直到列表中只有1个元素。
这是一种优化吗?如果是这样,它应该有什么帮助呢?为什么是7?插入排序(甚至是<=7排序)大大增加了对大型数组进行排序所需的比较次数-因此会增加compareTo()调用速度较慢的排序的开销。
(对于不同的INSERTIONSORT_THRESHOLD值,x轴为size of array,y轴为# of comparisons )
我试着用python实现插入排序。我试图理解它背后的逻辑,并实现了它,它最终证明了我是一个排序列表,但我怀疑它是否严格地使用了插入排序。有人能确认这真的是插入排序吗?如果我听起来很傻,很抱歉。
u = [1,43,2,312,3,124,6,6]
for i in range(len(u)):
for j in range(i,0,-1):
if u[j] < u[j-1]:
u[j-1],u[j] = u[j],u[j-1]
print(u)
我得到的答案是1,2,3,6,6,43,124,312
我知道作业问题不是这里最受欢迎的问题,但我完全不知所措。我正在做一项作业,要求我们做多个排序算法。不过,其中一个让我发疯了。我在网上任何地方都找不到它的例子,他在课堂上也没有把它看完。我们必须做一个合并排序,如下所示:
void mergeSort(int * a, int s, bool n = false)
其中a是数组,s是所述数组的大小,n对于二进制合并排序为false,对于自然合并排序为true。问题是,我找不到什么自然合并排序和二进制合并排序。我只是找到了合并。他们都要求更多的变量。
我只是问,是否有人知道我在哪里可以找到一个很好的解释这两种不同类型的合并。