交换或冒泡排序
冒泡排序方法 基于两个连续的元素连续比较和排序之前,元素之间的交流。
的向量,如下表所示,以执行管理有遵循这些帕索假设:
- 相比前两个元素,如果高于第一、 第二次他们并不像他们,但如果第一次是最大,就是交换的元素。
- ,然后相比,第二个元素三通过应用相同的标准作为前一步。
- 以这种方式是重复操作相比形成向量的所有元素。当它到达的最后一个元素已有的最高值的元素,这是位于结束向量。
- 找到第二个元素被重复了运营管理的所有元素的数组,除了最后一次。
- 重申的过程所述,向量被命令时只比较的前两个元素。
第一次的管理。
示例中的管理由泡沫查找第一个元素。
| 矢量 | 比较 1 | 2 比较 | 3 比较 | 4 比较 | 5 比较 |
V [1] | 3 | 3 | 3 | 3 | 3 | 3 |
V [2] | 34 | 34 | 1 | 1 | 1 | 1 |
V [3] | 1 | 1 | 34 | 34 | 34 | 34 |
v [4] | 53 | 53 | 53 | 53 | 15 | 15 |
V [5] | 15 | 15 | 15 | 15 | 53 | 6 |
[6] V | 6 | 6 | 6 | 6 | 6 | 53 |
pseudocó 所述的管理过程我说结构化 e:
从 j.← 1 到 n-1 做 如果 元素 [j] > 元素 [j + 1] 然后 intercambiar(elemento[j],_elemento[j+1]) fin_si fin_desde
交换元素过程必须使用以下形式的辅助变量为:
aux ← [j] [j] V V ← V [j + 1] V [j + 1] ← aux
第二个管理。
| 矢量 | 1 管理 | 1 比较 | 2 比较 | 3 比较 | 4 比较 |
V [1] | 3 | 3 | 1 | 1 | 1 | 1 |
V [2] | 34 | 1 | 3 | 3 | 3 | 3 |
V [3] | 1 | 34 | 34 | 34 | 15 | 15 |
V [4] | 53 | 15 | 15 | 15 | 34 | 6 |
V [5] | 15 | 6 | 6 | 6 | 6 | 34 |
V [6] | 6 | 53 | 53 | 53 | 53 | 53 |
之后第二个最大的两个向量元素已被发现,他们已将自己放在相同的末尾。
算法的泡沫。
推广管理进程是泡沫的获得下面的伪代码结构算法
我-变主教 <br/> j-变量比较 <br/> n-向量中的元素数 (c 表示最大索引)
算法 泡沫的 家庭 / / 主教 因为 我 ← 1 到 n-1 做 / / 比较 从 j ← 1 起 倪 做 如果 元素 [j] > 元素 [j + 1] 然后 / / 交换元素 aux ← [j] [j] V V ← V [j + 1] V [j + 1] ← aux fin_si fin_desde fin_desde 结束
C 中的示例:
v [] int = {3、 34、 1、 53、 15、 6} ; int j、 i、 aux ;/ / 管理 (我 = 0; _i < 5 ; _i + +) {/ / 比较 (j = 0 ; _j < 5-i ; _j + +) {/ / 交换元素,如果 (v [j] _ > _v[j+1]) {aux = v [j];}}}[j] v = v [j + 1] ;v [j + 1] = aux ;{}}
以下的塔夫拉所示重申在排序获取排序向量:
| 矢量 | 1 管理 | 管理 2 | 第三届管理 | 管理 4 | 第五届管理 |
V [1] | 3 | 3 | 1 | 1 | 1 <br/> | 1 |
V [2] | 34 | 1 | 3 | 3 | 3 | 3 |
V [3] | 1 | 34 | 15 | 6 | 6 | 6 |
V [4] | 53 | 15 | 6 | 15 | 15 | 15 |
V [5] | 15 | 6 | 34 | 34 | 34 | 34 |
V [6] | 6 | 53 | 53 | 53 | 53 | 53 |
的泡沫改善管理方法。
如果你看看我们注意到在第三个管理、 非必要使第四和第五次的管理,但是分析的泡沫算法的执行所有的比较的排序最多 (n-1) 已订购向量排序表
。您可以检测的向量是有秩序和中断的主教,从而提高算法的性能。当是管理 如果所有比较有都了交换是因为排序向量的元素。指标、 标志或布尔变量可用于检测管理的结束
下面的算法显示一个版本优化方法的排序泡沫。
我-变主教 <br/> j-变量比较 <br/> n-向量中的元素数 (c 表示最大索引) <br/> ord-指标排序向量的变量
算法 Burbuja2 家庭 / / 主教我 ← 1 / / 开始主教 ord ← 0 / / 开始订购 时 ord 向量的指标 = 0 做 ord ← 1 / / 比较 从 j ← 1 到 n-我 使 如果 元素 [j] > 元素 [j + 1] 然后 / / 交换元素 aux ← [j] [j] V V ←V [j + 1] V [j + 1] ← aux ord ← 0 fin_si fin_desde 我 ← k fin_mientras 结束
示例中 c:
int [v] = {3、 34、 1、 53、 15、 6} ; int j、 aux ; int 我 = 0 ; bool ord = false ;/ / 主教 while(!ord) {/ / 比较 ord = true ;}为 (j = 0; j < 5-i ; j + + 中) {如果 (v [j] > v[j+1]) {/ / 交换元素 aux = v [j];}}[j] v = v [j + 1] ;v [j + 1] = aux ;奥德 = false ;{{/ / 指标排序向量}} 我 + + ;}
C + + 生成器中的示例:
/ # 包括 <vcl.h> # include <iostream.h> # include <conio.h> # pragma hdrstop / / # pragma argsused int main(int_argc,_char*_argv[]) {/ / 可变 int [v] = {3、 34、 1、 53、 15、 6} ; int j、 aux ; int 我 = 0 ; bool ord = false ;}/ / 显示的向量 (int_n = 0 ; _n < 6 ; _n + +) {cout << v [n] <<"";}/ / 主教 while(!ord) {/ / 比较 ord = true ;}为 (j = 0; j < 5-i ; j + + 中) {如果 (v [j] > v[j+1]) {/ / 交换元素 aux = v [j];}}[j] v = v [j + 1] ;v [j + 1] = aux ;奥德 = false ;{{/ / 指标排序向量}} 我 + + ;} / / 显示数组订购 cout << endl ;为 (int_n = 0 ; _n < 6 ; _n + +) {cout << v [n] <<"";}getch() ;返回 0 ;} / /-
许多作者批评泡沫由于其产量低的排序方法和 desmerecida 的意义,虽然我的这些看法,是一个非常简单的系统,完全适应他的工作室在中心的形成。
其他方法的管理 选定内容 或 插入 提供更好的结果,如管理系统 快速 (快速排序)、 外壳 和 合并 是最有效的提供一些壮观返回时排序向量的大尺寸。