排序 – 为什么我的Rust实现InsertionSort比我的C版慢?
发布时间:2020-12-16 07:12:46 所属栏目:百科 来源:网络整理
导读:我决定开始学习编程语言来重写我的程序.第一个是大学第二年的简单课程.但是……看看测试!为什么简单的插入排序如此之慢? 测试C: ARRAY SIZE: 100000 counting_sort: 0.003602 insertion_sort: 8.273647 heap_sort: 0.017918 Rust测试: ARRAY SIZE: 10000
我决定开始学习编程语言来重写我的程序.第一个是大学第二年的简单课程.但是……看看测试!为什么简单的插入排序如此之慢?
测试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; } } 防锈版本: 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; } } } 我没有在发布模式下构建.即使在发布模式下编译之后: C版(gcc -O3): ARRAY SIZE: 100000 < counting_sort: 0.001252 < insertion_sort: 1.672351 < heap_sort: 0.008694 Rust版本(货物构建 – 发布): ARRAY SIZE: 100000 < counting_sort: PT0.001556914S < insertion_sort: PT3.291146043S < heap_sort: PT0.008269021S 解决方法
我愿意打赌它是阵列访问的边界检查.你做了很多. 如果您使用迭代器而不是直接访问,则不需要支付此罚金.不幸的是,目前我还没有一个方便的迭代器版本.也许别人可以贡献一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |