在计算机科学中,选择排序是排序算法,特别是就地比较排序。它具有O(n2)时间复杂度,使其在大型列表上效率低下,并且通常比类似的插入排序更差。选择排序因其简单性而着称,并且在某些情况下具有优于更复杂算法的性能优势,特别是在辅助存储器有限的情况下。
正在从事一个项目,我试图在LMC中实现选择排序。我想尝试使用自修改代码,而不是使用固定内存。这里我尝试将数组的大小固定为 6 所以...
在此输入图像描述 我应该像这张照片一样解决时间复杂度方法,但我在解决选择排序时遇到问题。 我一般性地解决了它,而不是像我想要的那样详细解决...
优化选择排序算法对于有效处理大型数据集至关重要。然而,由于其 O(n^2) 时间复杂度,随着数据集大小的增加,它的性能会变得困难。至
我编写了以下使用选择排序对数组进行排序的方法: 公共 T[] 选择(T[] arr) { T温度,分钟; for(int i = 0; i < arr.length-1; i++) { for(int j = i + 1...
我一直在寻找一种递归选择排序,仅使用2个参数: 需要排序的数组 值 k,表示直到 必须对其进行排序的元素。 示例:选择排序(
我有一个任务来计算我播放最喜欢的艺术家的音乐的次数,我需要将其从最常播放到最少播放进行排名
如果第一个函数和第二个函数执行相同的任务,它们有什么区别,哪个更快? 注意GPT4聊天的第一个功能 def选择排序(arr): ”“...
我是 C++ 新手。我试图按以下方式编写一个用于选择排序的函数。 void Selection_sort(int* m[], int array_size) { 对于 (int i = 0; i < array_size; i++) int min...
我已经写了一个C程序。它应该使用递归选择排序,但对于大输入(10000 或更多)会出现分段错误。调试器说段错误发生在 findim 函数中,但是......
为什么选择排序最佳情况表示法(Omega 表示法)是 n^2 而不仅仅是 n?
我正在在线学习CS50,第三周我们学习了算法。 当我们谈到算法的复杂性时,讲座说选择排序的最坏情况是n^2,因为算法...
我写了一个选择排序算法,但没有用。我找不到我的错。任何人都可以帮助我吗? #包括 int 主函数 () { int array[100],i,j,位置,大小,交换; 原则...
作业是通过交换节点而不是值来使用选择排序。当排序算法更改最后一个节点时,它会引发 AttributeError,因为看起来 def min_sort() 中的first.next...
导入java.util.Arrays; 公共类 RecSelect { 公共静态无效选择(int [] ar,int idx,int min,int start){ if(idx == ar.length) { 返回; } 如果(id...
我的代码继续循环一组代码,但我只需要它发布一次语句,如果我更改代码,我的编码最终不会像我需要的那样对数组进行排序 我尝试移动我的
为什么在 JavaScript 中的选择排序算法中使用索引变量有效?
我试图理解为什么使用变量来分配索引效果很好,而不是在下面使用 JavaScri 的选择排序算法的代码片段中直接使用索引本身...
void simpleSort(int arr[], int arrSize){ /*初始搜索空间边界*/ 左整数 = 0; int 右 = arrSize-1; int maxElem、minElem、maxElemIndex、minElemIndex; 同时(左...
计数器 += (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...
我学习了一个简单的选择排序算法并尝试使用 javascript/typescript。 这是我在 SelectionSort 类中的 Selection.sort 算法 导出默认类 SelectionSort { 私人
我对 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。
标题。我对 Rust 很陌生,所以我可能会错过一些简单的东西。我正在使用 Rust 1.70.0-nightly。这是必要的代码: fn Selection_sort(original_vec: &mut Vec) -> Vec&...