文档介绍:--------------------------------- 精选公文范文 --------------------------
排序归并、快排、优
先队列等
各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢
思想:首先,找到数组中最小的那
个元素。其次,将它和数组的第一个元
素交换位置。再次,在剩下的元素中找
到最小的元素,将它与数组的第二个元
素交换位置。如此往复,直到将整个数
组排序。
【图例】
图中,x 轴方向为数组的索引, y 轴
方向为待排序元素的值。
选择排序有两个很鲜明的特点:
运行时间和输入无关。为了找出最
小的元素而扫描一遍数组并不能为下一
遍扫描提供什么信息。这种性质在某些
情况下是缺点。
数据移动是最少的。每次交换都会
改变两个数组元素的值,因此选择排序
用了 N 次交换 —— 交换次数和数组的大
1
---------------- 精选公文范文 ----------------
--------------------------------- 精选公文范文 --------------------------
小是线性关系。
【对于长度为 N 的数组,选择排序
需要大约 N2/2 次比较和 N 次交换】
思想:它重复地走访过要排序的数
列,一次比较两个元素,如果他们的顺
序错误就把他们交换过来。走访数列的
工作是重复地进行直到没有再需要交
换,也就是说该数列已经排序完成。这
个算法的名字由来是因为越小的元素会
经由交换慢慢 “浮”到数列的顶端。
冒泡排序算法的运作如下:
1、比较相邻的元素。如果第一个比
第二个大,就交换他们两个。
2、对每一对相邻元素作同样的工
作,从开始第一对到结尾的最后一对。
在这一点,最后的元素应该会是最大的
数。
3、针对所有的元素重复以上的步
骤,除了最后一个。
4、持续每次对越来越少的元素重复
上面的步骤,直到没有任何一对数字需
要比较。
2
---------------- 精选公文范文 ----------------
--------------------------------- 精选公文范文 --------------------------
【图例】
图中,x 轴方向为数组的索引, y 轴
方向为待排序元素的值。
由图中可看出,冒泡排序是从后到
前,逐步有序的,最大的元素先沉到底
部,接着是次大的 ⋯⋯
void%20BubbleSort(Comparable%20a){
%20%20%20%20//exchanged表示是否做
过交换处理,一趟冒泡没有做过交换处
理,即没有改变任何元素的位置,则停
止 冒
泡。 %20%20%20%20bool%20exchanged
%20=%20false%20;%20%20%20%20%2
0int%20N%20=%%20;%20%20%20%20
%20%20%20%20//最多 n-1 趟冒泡排序
(若发现某趟排序没有交换操作 ,则停止
冒
泡 )%20%20%20%20%20for%20(int%20i
%20=%201;%20i%20%20a)%20%20%20
%20%20%20%20%20%20%20%20%20{
%20%20%20%20%20%20%20%20%20
3
---------------- 精选公文范文 ----------------
--------------------------------- 精选公文范文 --------------------------
%20%20%20%20%20%20%20exch(a,%2
0a)%20;%20%20%20%20// 交 换 a 、
a%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20exchanged
%20=%20true%20;%20%20%20//标记 有
元 素 交