- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我决定开始学习一种编程语言来重写我的程序。第一个是大学二年级的一个简单程序。但是……看看测试!为什么简单的插入排序这么慢?
在 C 上测试:
ARRAY SIZE: 100000
< counting_sort: 0.003602
< insertion_sort: 8.273647
< heap_sort: 0.017918
Rust 测试:
ARRAY SIZE: 100000
< counting_sort: PT0.039530982S
< insertion_sort: PT276.529915469S
< heap_sort: PT0.117946209S
如何改进转换后的代码?
C 版:
void insertion_sort(int a[], int length) {
int i, j, value;
for (i = 1; i < length; i++) {
value = a[i];
for (j = i - 1; j >= 0 && a[j] > value; j--) {
a[j + 1] = a[j];
}
a[j + 1] = value;
}
}
Rust 版本:
pub fn insertion_sort(array: &mut [i32]) {
let mut value;
for i in 1..array.len() {
value = array[i];
let mut flag = true;
for j in (0..i).rev() {
if array[j] > value {
array[j + 1] = array[j];
} else {
flag = false;
array[j + 1] = value;
break;
}
}
if flag {
array[0] = value;
}
}
}
我没有在 Release模式下构建。即使在 Release模式下编译之后:
C 版本(gcc -O3
):
ARRAY SIZE: 100000
< counting_sort: 0.001252
< insertion_sort: 1.672351
< heap_sort: 0.008694
Rust 版本(cargo build --release
):
ARRAY SIZE: 100000
< counting_sort: PT0.001556914S
< insertion_sort: PT3.291146043S
< heap_sort: PT0.008269021S
最佳答案
Why is a simple insertion sort so slow?
我敢打赌这是对数组访问的边界检查。你做了很多。
如果你使用迭代器而不是直接访问,你就不会付出这种代价。不幸的是,目前我没有方便您使用迭代器的版本。也许其他人可以贡献一个。 :)
关于sorting - 为什么我的 InsertionSort 的 Rust 实现比我的 C 版本慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30965257/
public class First{ public static void main(String[] args){ int[] arr = new int[]{4, 2,
这里制定的算法的复杂度为 O(n^2)(插入排序)。该算法虽然得到一个 NullPointerException,因为 String 数组中有 null 元素。如何让我的算法对包含空元素的数组进行排序
我有一个合并排序需要在特定数字切换到插入排序,这是我的阈值。但我的阈值只能是 1、2 或 3,因为在任何其他情况下,我的合并排序都会变得非常慢。我似乎无法让代码协同工作。 这是我的代码: public
*在这个程序中,我正在读取两个文件,然后删除所有标点符号,然后应用“插入算法”(我在这个程序中创建了一个方法)。每次我调用这个程序时,包括“InsertionSort”一个空的输出文件正在生成并且排除
对于两种不同的排序,我有两个实现,InsertionSort 和 ShellSort。 它们如下: 插入排序: for (int pos = 0; pos 0; secondMarker--) {
我是 Swift 的新手,我想知道我应该如何修改包含在我的 Int[] 中的 Int?我做的就像我在 Java 中做的那样,但显然,它不起作用:我得到一个 Cannot assign to immut
美好的一天 SO 社区, 我是一名 CS 学生,目前正在进行结合 MergeSort 和 InsertionSort 的实验。据了解,对于某个阈值 S,InsertionSort 将比 MergeSo
我决定开始学习一种编程语言来重写我的程序。第一个是大学二年级的一个简单程序。但是……看看测试!为什么简单的插入排序这么慢? 在 C 上测试: ARRAY SIZE: 100000 = 0 && a[j
最近,我着迷于 ShellSort 算法思想,简单地在小子列表中使用 InsertionSort,然后最后对整个列表使用 InsertionSort。 所以,我想为什么不将 MergeSort 与 I
我是一名优秀的程序员,十分优秀!