漫画:什么是选择排序?

简介: 我们假定要获得升序数列,冒泡排序的原理是什么呢?顾名思义,就是把每一元素和下一个元素进行比较和交换,使得较大的元素像气泡一样向右侧移动:



640.jpg640.jpg


—————  第二天  —————



640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg



————————————


640.jpg640.jpg640.jpg640.jpg

我们假定要获得升序数列,冒泡排序的原理是什么呢?

顾名思义,就是把每一元素和下一个元素进行比较和交换,使得较大的元素像气泡一样向右侧移动:

640.png

这样一来,每一轮操作都可以把一个最大元素移动到最右侧,经过多轮操作,无序的数列成为了升序数列:

640.jpg


这就是冒泡排序的基本原理。

640.jpg640.jpg640.jpg640.jpg



如果是按照冒泡排序的思路来指挥,结果会是什么样子呢?



640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg




如此一来,同学们一共交换了4次,还只是完成了冒泡排序的第一轮操作。如果继续下去,同学们心里恐怕会想:“这体育老师是不是有毛病啊?”


640.jpg

在程序运行的世界里,虽然计算机并不会产生什么“负面情绪”,但是频繁的数组元素交换意味着更多的内存读写操作,严重影响了代码运行效率。

640.jpg640.jpg


让我们来看一下具体的指挥过程:


640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg


如此一来,只需要很少的交换次数就可以完成队伍的排序,老师和同学们皆大欢喜。


640.jpg640.jpg640.jpg640.jpg640.jpg640.jpg

public
static
void
 selectionSort
(
int
[]
 array
){
for
(
int
 i
=
0
;
 i
<
array
.
length
-
1
;
 i
++){
int
 minIndex 
=
 i
;
for
(
int
 j 
=
 i
+
1
;
j
<
array
.
length
;
j
++){
            minIndex 
=
 array
[
minIndex
]<
array
[
j
]
?
 minIndex 
:
 j
;
}
int
 temp 
=
 array
[
i
];
        array
[
i
]
=
 array
[
minIndex
];
        array
[
minIndex
]
=
 temp
;
}
}
public
static
void
 main
(
String
[]
 args
)
{
int
[]
 array 
=
new
int
[]{
3
,
4
,
2
,
1
,
5
,
6
,
7
,
8
,
30
,
50
,
1
,
33
,
24
,
5
,-
4
,
7
,
0
};
    selectionSort
(
array
);
System
.
out
.
println
(
Arrays
.
toString
(
array
));
}
640.jpg 640.jpg 640.jpg 640.jpg 640.jpg 640.jpg 640.jpg 640.jpg 640.png

上图中,绿色的5原本排在橙色的5之前,但是随着第一轮元素3和绿色5的交换,使得后续操作中,绿色的5排在了橙色的5之后。image.gifimage.gif

640.jpg640.jpg640.jpg

相关文章
|
搜索推荐 算法
齐姐漫画:排序算法(一)
借用《算法导论》里的例子,就是我们打牌的时候,每新拿一张牌都会把它按顺序插入,这,其实就是插入排序。
122 0
齐姐漫画:排序算法(一)
|
搜索推荐 算法 IDE
齐姐漫画:排序算法(二)之「 归并排序」和「外排序」
那我们借用 cs50 里的例子,比如要把一摞卷子排好序,那用并归排序的思想是怎么做的呢?
139 0
齐姐漫画:排序算法(二)之「 归并排序」和「外排序」
漫画:什么是插入排序?
人们如何进行扑克牌的排序呢? 举个例子,比如我手中有红桃6,7,9,10这四张牌,已经处于升序排列:这时候,我又抓到了一张红桃8,如何让手中的五张牌重新变成升序呢?用冒泡排序,选择排序,亦或是快速排序?
130 0
漫画:什么是插入排序?
|
搜索推荐 算法 Shell
漫画:什么是希尔排序?
像这样逐步分组进行粗调,再进行直接插入排序的思想,就是希尔排序,根据该算法的发明者,计算机科学家Donald Shell的名字所命名。 上面示例中所使用的分组跨度(4,2,1),被称为希尔排序的增量,增量的选择可以有很多种,我们在示例中所用的逐步折半的增量方法,是Donald Shell在发明希尔排序时提出的一种朴素方法,被称为希尔增量。
113 0
漫画:什么是希尔排序?
|
搜索推荐
漫画:什么是冒泡排序?
什么是冒泡排序?冒泡排序的英文Bubble Sort,是一种最基础的交换排序。 大家一定都喝过汽水,汽水中常常有许多小小的气泡,哗啦哗啦飘到上面来。这是因为组成小气泡的二氧化碳比水要轻,所以小气泡可以一点一点向上浮动。
223 0
漫画:什么是冒泡排序?
|
存储 算法
漫画:什么是堆排序?
在上一篇漫画中,小灰介绍了 二叉堆 这样一种强大的数据结构: 漫画:什么是二叉堆?(修正版) 那么,这个二叉堆怎样来使用呢?我们这一期将会详细讲述。
169 0
漫画:什么是堆排序?
|
存储 缓存 搜索推荐
漫画:“排序算法” 大总结
冒泡排序: 漫画:什么是冒泡排序? 选择排序: 漫画:什么是选择排序? 插入排序: 漫画:什么是插入排序? 此外还有冒泡排序的变种,鸡尾酒排序: 漫画:什么是鸡尾酒排序?
135 0
漫画:“排序算法” 大总结
|
算法 搜索推荐
漫画:什么是基数排序?
数组每一个下标位置的值,代表了数列中对应整数出现的次数。 有了这个“统计结果”,排序就很简单了。直接遍历数组,输出数组元素的下标值,元素的值是几,就输出几次: 0,1,1,2,3,3,3,4,4,5,5,6,7,7,8,9,9,9,9,10 显然,这个输出的数列已经是有序的了。 这就是计数排序的朴素版本。
118 0
漫画:什么是基数排序?
|
存储 算法
漫画:什么是归并排序?
举个例子,有A、B、C、D、E、F、G、H一共8个武术家参考参加比武大会。 第一轮,两两一组,有4名选手胜出(四分之一决赛) 第二轮,两两一组,有两名选手胜出(半决赛) 第三轮,仅剩的两人一组,冠军胜出(总决赛)
漫画:什么是归并排序?