User: alciro    User
 Original    Translate to:  Deutsch  English  Français  中文  
 

Programación en C++ Builder

 数组 (数组)
 指针
3. 例如在C + +类
8. AnsiString类型类的方法
 C + +项目
 包,分发的应用程序,无需安装
 交换或冒泡排序
 String.h 字符串函数

交换或冒泡排序

冒泡排序方法 基于两个连续的元素连续比较和排序之前,元素之间的交流。

的向量,如下表所示,以执行管理有遵循这些帕索假设:

  • 相比前两个元素,如果高于第一、 第二次他们并不像他们,但如果第一次是最大,就是交换的元素。
  • ,然后相比,第二个元素三通过应用相同的标准作为前一步。
  • 以这种方式是重复操作相比形成向量的所有元素。当它到达的最后一个元素已有的最高值的元素,这是位于结束向量。
  • 找到第二个元素被重复了运营管理的所有元素的数组,除了最后一次。
  • 重申的过程所述,向量被命令时只比较的前两个元素。

第一次的管理。

示例中的管理由泡沫查找第一个元素。

矢量 比较 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 的意义,虽然我的这些看法,是一个非常简单的系统,完全适应他的工作室在中心的形成。

其他方法的管理 选定内容插入 提供更好的结果,如管理系统 快速 (快速排序 外壳合并 是最有效的提供一些壮观返回时排序向量的大尺寸。

Loading
copyright © 2007-2024  www.alciro.org  All rights reserved.         
Share |