我昨天在课堂上接受了这项任务,并认为我理解了选择排序的过程,但我现在对此感到有点不确定。我认为在每次传球后,左边的数字会被排序,并且不会再次检查,直到右边的所有数字都被排序。
以下是说明和我的回答:
在每次选择排序后显示结果数组 算法。如果算法在给定传球之前停止,请离开 传递空白。
Original Array: 30 8 2 25 27 20
PASS 1: 8 30 2 25 27 20
PASS 2: 8 2 30 25 27 20
PASS 3: 8 2 25 30 27 20
PASS 4: 8 2 25 27 30 20
PASS 5: 8 2 25 27 20 30
有人可以告诉我,如果我这样做了吗?
答案 0 :(得分:3)
在伪代码中:
Repeat until no unsorted elements remain:
Search the unsorted part of the data to find the smallest value
Swap the smallest found value with the first element of the unsorted part
据此,您的数据列表将是......
Original Array: 30 8 2 25 27 20
P1: [2] 8 30 25 27 20 // smallest(2), swap this with the first value(30)
P2: [2 8] 30 25 27 20 // smallest(8), don't need to swap
P3: [2 8 20] 25 27 30 // smallest(20), swap this with the first ele of unsorted list(30)
P4: [2 8 20 25] 27 30 // smallest(25), don't need to swap
P5: [2 8 20 25 27] 30 // smallest(27), don't need to swap
P6: [2 8 20 25 27 30] // smallest(30), don't need to swap... sorted!
不需要PASS 6,因为无论如何最后一个元素已经被分类了。
查看来自CS50的视频(哈佛大学详细解释。):https://www.youtube.com/watch?v=3hH8kTHFw2A
答案 1 :(得分:3)
我很高兴你试了一下
算法是:
repeat (numOfElements - 1) times
set the first unsorted element as the minimum
for each of the unsorted elements
if element < currentMinimum
set element as new minimum
swap minimum with first unsorted position
输出将是:
Pass 1 : 2 8 30 25 27 20
Pass 2 : 2 8 30 25 27 20
Pass 3 : 2 8 20 25 27 30
Pass 4 : 2 8 20 25 27 30
Pass 5 : 2 8 20 25 27 30
您可以提供自定义输入,它会向您显示逐步输出: https://visualgo.net/bn/sorting
希望这会有所帮助:D
为你的学习干杯!
答案 2 :(得分:2)
我注意到2是数组中最小的元素。所以在第一遍中它应该在数组的开头。请参考以下示例。
示例1: arr [] = 64 25 12 22 11
//找到arr [0 ... 4]中的最小元素 //并将其放在开头 11 25 12 22 64
//找到arr [1 ... 4]中的最小元素 //并将其放在arr [1 ... 4]的开头 11 12 25 22 64
//找到arr [2 ... 4]中的最小元素 //并将其放在arr [2 ... 4]的开头 11 12 22 25 64
//找到arr [3 ... 4]中的最小元素 //并将其放在arr [3 ... 4]的开头 11 12 22 25 64
参考1:https://www.hackerearth.com/practice/algorithms/sorting/selection-sort/tutorial/
参考2:https://www.tutorialspoint.com/data_structures_algorithms/selection_sort_algorithm.htm
答案 3 :(得分:2)
如果你看看你的结果,很明显你没有正确地完成它。八是不少于两个! :)
取第一项:30。找到最小值:2。交换它。
PASS 1: 2 | 8 30 25 27 20
列表的第一部分现在已经排序(用管道表示)。
采取下一项:8。找到min - 8实际上是min。没有交换。
PASS 2: 2 8 | 30 25 27 20
采取下一项:30。找到最小值:20。交换它。
PASS 3: 2 8 20 | 25 27 30
采取下一个项目:25。这是最小值。没有交换。
PASS 4: 2 8 20 25 | 27 30
采取下一项:27。这是最小值。没有交换。
PASS 5: 2 8 20 25 27 | 30
采取下一项:30。这是最小值。没有交换。
现在对列表进行了排序。
答案 4 :(得分:0)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
<style>
.test {
display: flex;
justify-content: space-between;
}
</style>
<!------ Include the above in your HEAD tag ---------->
<div class="container">
<div class="page-header">
<h1>Panels with nav tabs.<span class="pull-right label label-default">:)</span></h1>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel with-nav-tabs panel-default">
<div class="panel-heading">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1default" data-toggle="tab">Default 1</a></li>
<li><a href="#tab2default" data-toggle="tab">Default 2</a></li>
<li><a href="#tab3default" data-toggle="tab">Default 3</a></li>
<li><a href="#tab4default" data-toggle="tab">Default 4</a></li>
<li><a href="#tab5default" data-toggle="tab">Default 5</a></li>
</ul>
</div>
<div class="panel-body">
<div class="tab-content">
<div class="test">
<div>
<img src="https://homepages.cae.wisc.edu/~ece533/images/airplane.png" width="100" height="200">
<div class="desc">Add a description of the image here</div>
</div>
<div>
<img src="https://homepages.cae.wisc.edu/~ece533/images/arctichare.png" width="100" height="200">
<div class="desc">Add a description of the image here</div>
</div>
</div>
</div>
</div>
<br/>