计算机冒泡排列顺序vf,谁能说明冒泡排序和选择排序在VF中的示例,还有那个次数是?...

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

qwe3512820

2014.01.13

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:58%    等级:12

已帮助:4160人

初始关键字 [49 38 65 97 76 13 27 49]

第一趟排序后 13 〔38 65 97 76 49 27 49]

第二趟排序后 13 27 〔65 97 76 49 38 49]

第三趟排序后 13 27 38 [97 76 49 65 49]

第四趟排序后 13 27 38 49 [76 97 65 49 ]

第五趟排序后 13 27 38 49 49 [97 65 76]

第六趟排序后 13 27 38 49 49 65 [97 76]

第七趟排序后 13 27 38 49 49 65 76 [97]

最后排序结果 13 27 38 49 49 65 76 97

[编辑本段]C语言过程

v

for(j=0;j

if(arr[maxPos]

if(maxPos!=i)swapArrData(arr,maxPos,i);

}

}

选择排序法的第一层循环从起始元素开始选到倒数第二个元素,主要是在每次进入的第二层循环之前,将外层循环的下标赋值给临时变量,接下来的第二层循环中,如果发现有比这个最小位置处的元素更小的元素,则将那个更小的元素的下标赋给临时变量,最后,在二层循环退出后,如果临时变量改变,则说明,有比当前外层循环位置更小的元素,需要将这两个元素交换.

[编辑本段]php语言过程

function selection_sort($array){

$count = count($array);

for ($i=0;$i

/* find the minest */

$min = $i;

echo '$min-->'.$array[$min].'-->';

for ($j=$i+1;$j

//由小到大排列

if ($array[$min]>$array[$j]) {//表明当前最小的还比当前的元素大

$min = $j;//赋值新的最小的

}

}

echo $array[$min].'coco
';

/* swap $array[$i] and $array[$min] 即将当前内循环的最小元素放在$i位置上*/

$temp = $array[$min];

$array[$min] = $array[$i];

$array[$i] = $temp;

}

return $array;

}

$old_array = array(3,4,1,6,5,2);

$new_array = selection_sort($old_array);

print_r($new_array);

?>冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。

冒泡排序是稳定的。

产生

在许多程序设计中,我们需要将一个数列进行排序,以方便统计,常见的排序方法有冒泡排序,二叉树排序,选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍受青睐。

排序过程

设想被排序的数组R〔1..N〕垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。

算法示例

49 13 13 13 13 13 13 13

38 49 27 27 27 27 27 27

65 38 49 38 38 38 38 38

97 65 38 49 49 49 49 49

76 97 65 49 49 49 49 49

13 76 97 65 65 65 65 65

27 27 76 97 76 76 76 76

49 49 49 76 97 97 97 97

Procedure BubbleSort(Var R : FileType) //从下往上扫描的起泡排序//

Begin

For I := 1 To N-1 Do //做N-1趟排序//

begin

NoSwap := True; //置未排序的标志//

For J := N - 1 DownTo 1 Do //从底部往上扫描//

begin

If R[J+1]< R[J] Then //交换元素//

begin

Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp;

NoSwap := False

end;

end;

If NoSwap Then Return//本趟排序中未发生交换,则终止算法//

end

End; //BubbleSort//

该算法的时间复杂性为O(n^2),算法为稳定的排序方

[编辑本段]冒泡排序代码

C

void bubble_sort(int a[], int n)

{

int i = n-1; bool change = true;

for (; i>=1&&change; --i)

{

change = false;

for (int j = 0; j

{

if (a[j]>a[j+1])

{

int nTemp = a[j+1];

a[j+1] = a[j];

a[j] = nTemp;

change = true;

}

}

}

}

C++

#include

#define LEN 9

using namespace std;

int main(){

int nArray[LEN];

for(int i=0;i

cout<

for(int i=0;i

cout<

//开始冒泡

{

int temp;

for(int i=LEN-1;i>0;i--)

for(int j=0;j

if(nArray[j]>nArray[j+1]){

temp=nArray[j];

nArray[j]=nArray[j+1];

nArray[j+1]=temp;

}

}

}

//结束冒泡

cout<

for(int i=0;i

return 0;

}

PHP

//冒泡排序(一维数组)

function bubble_sort($array)

{

$count = count($array);

if ($count <= 0) return false;

for($i=0; $i

{

for($j=$count-1; $j>$i; $j--)

{

if ($array[$j] < $array[$j-1])

{

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

}

return $array;

}

//使用实例

$_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4');

$_array = bubble_sort($_array);

print ($_array);

?>

Ruby

def bubble(arr)

(arr.length-1).downto(1) do |j|

a1 = arr.dup

j.times do |i|

if arr > arr[i+1]

arr,arr[i+1] = arr[i+1],arr

end

end

break if a1 == arr

end

arr

end

Java

static void BubbleSort(int a []){

int temp=0;

for (int i = 0; i < a.length-1 ; i++) {

for (int j = 0; j < a.length - i - 1; j++){

if (a[j]>a[j + 1]){ //把这里改成大于,就是升序了

temp=a[j];

a[j]=a[j + 1];

a[j + 1]=temp;

}

}

}

}

Visual Basic

Option Explicit

Private Sub Form_click()

Dim a, c As Variant

Dim i As Integer, temp As Integer, w As Integer

a = Array(12, 45, 17, 80, 50)

For i = 0 To UBound(a) - 1

If (a(i) > a(i + 1)) Then '若是递减,改为a(i)

temp = a(i)

a(i) = a(i + 1)

a(i + 1) = temp

End If

Next

For Each c In a

Print c;

Next

End Sub

Pascal

program bubblesort;

const

N=20;

MAX=10;

var

a:array[1..N] of 1..MAX;

temp,i,j:integer;

begin

randomize;

for i:=1 to N do a:=1+random(MAX);

writeln('Array before sorted:');

for i:=1 to N do write(a,' ');

writeln;

for i:=N-1 downto 1 do

for j:=1 to i do

if a[j]

VFP实现选择排序 时间:2009-06-07来源:编程入门网 作者:老马   众所周知在常用的简单排序方法,前文所介绍的起泡排序(冒泡排序)是效率最差的一个了。我们今天所介绍的这个选择排序也是简单排序的一种,不过比起泡排序的效率要高,并且也比较容易实现。   这些常用的排序方法多见诸于C/C++方面的资料,如果要在vfp实现这些排序方法,原理是一样的,只是在代码实现上略有差别。例如,在C/C++数组的下标是从0开始,而vfp数组的下标是从1开始;C/C++的for语句可以采用for(i=0;i<n;i++)这种形式来同时完成变量赋初值、变量终值判断、变量递增这些操作,而vfp的for语句则有些弱,它的变量终值不能采取i<n这种形式来界定一个范围。因为以上的区别,在VFP书写代码时要特别注意数组下标问题及循环变量的初值及终值,在以后的文章不会再特别提及这些问题。   我们先看一下选择排序的基本思想和排序过程。(此部分内容引用自百度百科:http://baike.baidu.com/view/547263.htm)   基本思想   每一趟从待排序的数据元素选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。   选择排序是不稳定的排序方法。n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:    ①初始状态:无序区为R[1..n],有序区为空。    ②第1趟排序   在无序区R[1..n]选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。   ……    ③第i趟排序   第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n-1)。该趟排序从当前无序区选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。   这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。   排序过程   【示例】:    初始关键字 [49 38 65 97 76 13 27 49]   第一趟排序后 13 [38 65 97 76 49 27 49]   第二趟排序后 13 27 [65 97 76 49 38 49]   第三趟排序后 13 27 38 [97 76 49 65 49]   第四趟排序后 13 27 38 49 [49 97 65 76]   第五趟排序后 13 27 38 49 49 [97 65 76]   第六趟排序后 13 27 38 49 49 65 [97 76]   第七趟排序后 13 27 38 49 49 76 [97 76]   最后排序结果 13 27 38 49 49 76 76 97   知道这个排序方法的基本思想和排序过程,在vfp书写代码就简单了,只是需要注意vfp数组的下标及循环变量的初值及终值与C/C++的区别。实例的运行界面如下图:   本例依然采取生成10个随机整数的方式取得数据,然后用选择法对这10个整数进行从小到大的排序。实现过程:   一、新建表单,向表单添加一个编辑框控件及三个命令按钮,按上图设置这三个命令按钮的caption属性。   二、添加代码:   1.“生成10个随机整数”按钮的click事件: public s(10) for i=1 to 10 s(i)=int(rand()*100) &&产生两位数的随机整数 thisform.edit1.value=thisform.edit1.value+str(s(i),5) endfor   2.“清屏”按钮的click事件:thisform.edit1.value=""   3.“选择排序”按钮的click事件: local i,j,k,t as integer for i=1 to 9 k=i for j=i+1 to 10 if s(j)<s(k) k=j endif endfor t=s(k) s(k)=s(i) s(i)=t endfor thisform.edit1.value="" for i=1 to 10 thisform.edit1.value=thisform.edit1.value+str(s(i),5) endfor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值