selection-sort 相关问题

在计算机科学中,选择排序是排序算法,特别是就地比较排序。它具有O(n2)时间复杂度,使其在大型列表上效率低下,并且通常比类似的插入排序更差。选择排序因其简单性而着称,并且在某些情况下具有优于更复杂算法的性能优势,特别是在辅助存储器有限的情况下。

为什么选择排序最佳情况表示法(Omega 表示法)是 n^2 而不仅仅是 n?

我正在在线学习CS50,第三周我们学习了算法。 当我们谈到算法的复杂性时,讲座说选择排序的最坏情况是n^2,因为算法...

回答 2 投票 0

在C语言中为什么我的选择排序代码不起作用

我写了一个选择排序算法,但没有用。我找不到我的错。任何人都可以帮助我吗? #包括 int 主函数 () { int array[100],i,j,位置,大小,交换; 原则...

回答 1 投票 0

通过交换节点的链表选择排序

作业是通过交换节点而不是值来使用选择排序。当排序算法更改最后一个节点时,它会引发 AttributeError,因为看起来 def min_sort() 中的first.next...

回答 1 投票 0

递归选择排序堆栈溢出错误

导入java.util.Arrays; 公共类 RecSelect { 公共静态无效选择(int [] ar,int idx,int min,int start){ if(idx == ar.length) { 返回; } 如果(id...

回答 1 投票 0

如何让我的代码在寻找最小元素时只迭代一次

我的代码继续循环一组代码,但我只需要它发布一次语句,如果我更改代码,我的编码最终不会像我需要的那样对数组进行排序 我尝试移动我的

回答 1 投票 0

为什么在 JavaScript 中的选择排序算法中使用索引变量有效?

我试图理解为什么使用变量来分配索引效果很好,而不是在下面使用 JavaScri 的选择排序算法的代码片段中直接使用索引本身...

回答 1 投票 0

修改后的选择排序代码的时间复杂度是多少?

void simpleSort(int arr[], int arrSize){ /*初始搜索空间边界*/ 左整数 = 0; int 右 = arrSize-1; int maxElem、minElem、maxElemIndex、minElemIndex; 同时(左...

回答 1 投票 0

+=(关系)选择过程代码的含义[重复]

计数器 += (a1<=x); what this code statement says ? it is used in a problem to get how many numbers is lower than or equal (x) variable, this should be as comparison between a1 and a2 to get wha...

回答 1 投票 0

为什么我的打字稿中的选择排序不起作用

我学习了一个简单的选择排序算法并尝试使用 javascript/typescript。 这是我在 SelectionSort 类中的 Selection.sort 算法 导出默认类 SelectionSort { 私人

回答 1 投票 0

为什么 Rust 的默认排序功能比我的小数组选择排序稍慢?

我对 Rust 还很陌生,所以我可能会错过一些简单的东西。我正在使用 Rust 1.70.0-nightly。这是必要的代码: fn Selection_sort(original_vec: &mut Vec) -> Vec 我对 Rust 还很陌生,所以我可能会错过一些简单的东西。我正在使用 Rust 1.70.0-nightly。这是必要的代码: fn selection_sort(original_vec: &mut Vec<i32>) -> Vec<i32> { for i in 0..original_vec.len()-1 { let mut smallest: usize = i; for j in i+1..original_vec.len() { if original_vec[j] < original_vec[smallest] { smallest = j; } } if smallest != i { original_vec.swap(i, smallest); } }; original_vec.to_vec() } // helper function for testing (uses builtin sort function) fn rust_sort<A, T>(mut array: A) -> A where A: AsMut<[T]>, T: Ord, { let slice = array.as_mut(); slice.sort(); array } const TEST_VECS: [[i32; 10]; 6] = [ [1, 3, 2, 9, 6, 7, 4, 10, 8, 5], [1, 2, 7, 2, 9, 9, 7, 10, 2, 1], [0, 4, 1, 3, 9, 12, 3, 0, 13, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [-1, -5, -10, 1, 10, 2, -123, -34, 0, -32], [i32::MAX, -32984, i32::MIN, 31648, 5349857, -30954, -2343285, 0, 1, i32::MIN], ]; #[bench] fn bench_rust_sort(b: &mut Bencher) { b.iter(|| { for i in TEST_VECS { (&mut i.to_vec()).sort() } }) } #[bench] fn bench_selection_sort(b: &mut Bencher) { b.iter(|| { for i in TEST_VECS { selection_sort(&mut i.to_vec()); } }) } 当我跑步时cargo bench: $ cargo bench Compiling rust-algs v0.1.0 (/home/josia/projects/rust-algs) Finished bench [optimized] target(s) in 0.25s Running unittests src/lib.rs (target/release/deps/rustalgs-ae260c07593c3aad) running 3 tests test test_selection_sort ... ignored test bench_rust_sort ... bench: 106 ns/iter (+/- 8) test bench_selection_sort ... bench: 102 ns/iter (+/- 9) test result: ok. 0 passed; 0 failed; 1 ignored; 2 measured; 0 filtered out; finished in 7.65s 我尝试了很多次,甚至重命名了测试函数来改变测试的顺序。不管怎样,我的自定义选择排序功能仍然执行得更快。我猜问题在于我必须调用一个函数来包装主要的默认排序函数。调用实际函数是行不通的,因为即使我将基准函数中的 TEST_VECS 常量克隆为向量,排序函数也会继续对其进行排序,这不会让其他基准迭代对其进行排序。如果我在基准闭包中克隆常量,它将极大地影响基准迭代的性能,并且我将无法仅对我尝试运行的代码进行基准测试。 我对这些函数进行基准测试的方式是否有问题,或者我的自定义函数是否更快? 您正在转换类型和应对记忆。 将数组转换为向量需要时间。 如果您来自其他语言,您应该知道该常量无法修改。 所以你必须在基准代码中定义测试集。 b:&mut test::Bencher将用作长凳。 b.iter之外的代码不会被计入bench。 所以你必须像这样准备你的代码: #![feature(test)] #![allow(dead_code)] extern crate test; fn selection_sort(original_vec: &mut Vec<i32>) -> Vec<i32> { for i in 0..original_vec.len()-1 { let mut smallest: usize = i; for j in i+1..original_vec.len() { if original_vec[j] < original_vec[smallest] { smallest = j; } } if smallest != i { original_vec.swap(i, smallest); } }; original_vec.to_vec() } const TEST_VECS: [[i32; 10]; 6] = [ [1, 3, 2, 9, 6, 7, 4, 10, 8, 5], [1, 2, 7, 2, 9, 9, 7, 10, 2, 1], [0, 4, 1, 3, 9, 12, 3, 0, 13, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [-1, -5, -10, 1, 10, 2, -123, -34, 0, -32], [i32::MAX, -32984, i32::MIN, 31648, 5349857, -30954, -2343285, 0, 1, i32::MIN], ]; #[bench] fn bench_rust_sort(b: &mut test::Bencher) { let mut test_vecs: Vec<Vec<i32>> = TEST_VECS.iter().map(|v| v.to_vec()).collect(); b.iter(|| { for i in test_vecs.iter_mut() { i.sort() } }) } #[bench] fn bench_selection_sort(b: &mut test::Bencher) { let mut test_vecs: Vec<Vec<i32>> = TEST_VECS.iter().map(|v| v.to_vec()).collect(); b.iter(|| { for i in test_vecs.iter_mut() { selection_sort(i); } }) } fn main(){ } 结果如下: ➜ bench git:(master) ✗ cargo bench Finished bench [optimized] target(s) in 0.00s Running unittests src/main.rs (target/release/deps/bench-5bf7ec1e7001cf33) running 2 tests test bench_rust_sort ... bench: 43 ns/iter (+/- 0) test bench_selection_sort ... bench: 215 ns/iter (+/- 14) test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured; 0 filtered out; finished in 6.40s 我的笔记本电脑运行这个工作台: MacBook Pro 2020 i5,4 核 2.0Ghz。

回答 1 投票 0

为什么 Rust 的默认排序功能比我的选择排序慢?

标题。我对 Rust 很陌生,所以我可能会错过一些简单的东西。我正在使用 Rust 1.70.0-nightly。这是必要的代码: fn Selection_sort(original_vec: &mut Vec) -> Vec&...

回答 1 投票 0

选择按替代选择排序

我正在解决以下代码挑战: 令 N 为列表的大小。通过以下修改来实现选择排序算法: 在奇数次迭代中,找到

回答 1 投票 0

使用分支预测而不使用 else 语句

我目前正在实施选择排序。使用下面的代码和驱动程序文件来测试它。我目前正在尝试进行微观优化,看看如何加快速度。 公共静态无效

回答 1 投票 0

按linkedList排序

当我在奇数或偶数之间进行实现更改时,我可以获得预期的结果,但是,当我添加条件时,每次更改后结果仍然是乱序的,一个例子......

回答 1 投票 0

按备用选择排序

当我在奇数或偶数之间进行实现更改时,我可以获得预期的结果,但是,当我添加条件时,每次更改后结果仍然是乱序的,一个例子...

回答 1 投票 0

为什么我的 String[] ArrayList 排序不正确?

我正在从文件中读取数据,并询问用户他们想要按哪个类别进行排序。该文件有 13 列(从国家/地区、年份和大陆开始,然后是双重统计列表...

回答 1 投票 0

使用选择排序对数组进行排序

我已经实现了一个代码来使用选择排序对该数组进行排序。代码看起来没问题,但它并没有完美地对数组进行排序。这是要排序的数组,{20, 46, 22, 19, 6, 42, 14, 5,...

回答 2 投票 0

寻找选择排序大θ表示法的逐步过程

我无法弄清楚为该选择排序示例找到大θ表示法的过程。我在网上读到过,而且 tl;dr 的嵌套循环意味着它将 = O(n^2) 但是,我确实...

回答 1 投票 0

Golang 中的选择排序

我必须通过传递一个数组并使用 max 元素对其进行排序来创建一个选择排序函数,其中包含两个函数 swap 和 max。 func Swap(x *int, y *int) { 辅助 := *x *x = *y *y = au...

回答 1 投票 0

我的C选择排序代码没有发现任何问题,但是代码不起作用

我是 C 语言的初学者,我正在尝试学习如何使用这种选择排序算法来创建升序列表。但由于某种原因它没有运行,我似乎无法弄清楚为什么......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.