资源描述
选择选择法排序法排序之算法之算法实现实现1.选择排序的过程:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变变量量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变变量量k记住它在数组中的位置位置(下下标标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。2.21212525494925*25*161608081 2 3 4 5 6212125*25*i=1=14949252516162525161608084949080825*25*49492121i=2=2i=3=30808161625*25*25252121初始初始初始初始最小者最小者 08 08交交交交换换换换21,0821,08最小者最小者 16 16交交交交换换换换25,1625,16最小者最小者 21 21交交交交换换换换49,2149,213.494925*25*1 2 3 4 5 625*25*i=5=5252516160808494925*25*49492121结结果果i=4=40808161625252121最小者最小者 25*25*无交无交无交无交换换换换最小者最小者 25 25无交无交无交无交换换换换2525212116160808各趟排序后的各趟排序后的结结果果4.1、在选择排序过程中,经过一遍排序“加工”后,数组元素a(l)到a(7)的数据依次为“10,41,75,12,63,11,85”。则下一遍排序“加工”后数组元素a(l)到a(7)的数据依次是A.10,11,41,75,12,63,85B.10,11,75,12,63,41,85C.10,11,12,75,63,41,85D.10,11,12,41,63,75,85答案:B5.2、选择排序:在经过一遍排序“加工”后,数组元素a(1)到a(5)的数据依次为“28,70,57,53,30”。则下一遍排序“加工”后数组元素a(1)到a(5)的数据应该是A.28,30,70,53,57B.28,30,53,57,70C.28,30,57,53,70D.28,30,53,70,57答案:C6.第第1步步:找找出出n个个数数据据(a(1)至至a(n)中中的的 最最小小数数,并并与与第第1个个数数据据a(1)交交 换换位置;位置;选择选择法排序法排序第第2步步:在在剩剩下下的的n-1个个数数据据(a(2)至至a(n)中中找找出出最最小小数数,并并与与第第2个个数数据据 a(2)交交换换位置;位置;对对包含包含n个数据的数个数据的数组组按从小到大排列按从小到大排列 7.第第i步:步:在剩下的在剩下的n-i+1个数据个数据(a(i)至至a(n)中找出最小数,并与第中找出最小数,并与第 i 个数据个数据a(i)交交换换位置;位置;第第1步步:找找出出n个个数数据据(a(1)至至a(n)中中的的 最最小小数数,并并与与第第1个个数数据据a(1)交交 换换位置;位置;选择选择法排序法排序对对包含包含n个数据的数个数据的数组组按从小到大排列按从小到大排列 i=1?n-18.选择选择法排序的基本算法法排序的基本算法For i=1 To n-1 n代表的是数代表的是数组组里面数据的里面数据的总总数数Next i 找出找出a(i)a(i)至至a(n)a(n)中的最小中的最小值值将最小将最小值值与第与第i i个数据个数据a(i)a(i)交交换换位置位置 Min=i min变变量代表是找到的最小数量代表是找到的最小数For j=i+1 To n j变变量代表的当前量代表的当前处处理的数理的数组组下下标标 If a(Min)a(j)Then Min=jNext j 9.选择选择法排序的基本算法法排序的基本算法For i=1 To n-1 Next i 找出找出a(i)a(i)至至a(n)a(n)中的最小中的最小值值将最小将最小值值与第与第i i个数据个数据a(i)a(i)交交换换位置位置 Temp=a(i)a(i)=a(Min)a(Min)=Temp 10.一、随机生成一、随机生成10个整数个整数,请请用用选择选择法法对对其其进进行排序。行排序。Private Sub Command1_Click()Dim a(1 To 10)As IntegerDim i As Integer,j As Integer,k As Integer k变变量代表是找到的最小数量代表是找到的最小数 Print 排序以前的数排序以前的数:For i=1 To 10a(i)=Int(100*Rnd)Print a(i);Next iPrintFor i=1 To 9For i=1 to 9是因是因为为数数组组a只包含只包含10个元素,按个元素,按选择选择排序的要求,需要将数排序的要求,需要将数组组前前9个元素分个元素分别别与后面的元素(从与后面的元素(从i+1起,直到起,直到10为为止)比止)比较较大小大小 k=i k=i的作用的作用为为把把a(i)视为视为最小元素,最小元素,记录记录a(i)的数的数组组下下标标 For j=i+1 To 10 If a(k)a(j)Then k=j k=j的作用的作用为为当当a(j)比比a(k)小小时时,记录记录a(j)的数的数组组下下标标,k=j记录记录的是每一的是每一轮选择轮选择排序排序过过程的最小程的最小值值的数的数组组下下标标。End If Next j t=a(i):a(i)=a(k):a(k)=tNext i Print 排序以后的数排序以后的数:For i=1 To 10Print a(i);Next IPrintEnd Sub11.三、打开三、打开VB6.0,新建一个工程,在窗体中添加两个命令按,新建一个工程,在窗体中添加两个命令按钮钮,caption分分别别改改为为“升序排列升序排列”和和“降序排列降序排列”,添加两个个,添加两个个标签标签控件。控件。12.在通用声明在通用声明对话对话框框对对数数组进组进行定行定义义,使其成,使其成为为窗体窗体级变级变量:量:Dim a(1 To 10)As IntegerDim i,j,min,max As Integer首先首先产产生生10个个3位整数的随机数在位整数的随机数在标签标签中中显显示。示。双双击击窗体,在窗体,在Load事件中写入如下代事件中写入如下代码码:Private Sub Form_Load()Label1.Caption=RandomizeFor i=1 To 10a(i)=Int(Rnd*101+100)Label1.Caption=Label1.Caption&a(i)&Next iEnd Sub13.双双击击“升序排列升序排列”命令按命令按钮钮,进进入代入代码编辑码编辑窗口,窗口,输输入如下代入如下代码码:Private Sub Command1_Click()For i=1 To 9 Min=a(i)For j=i+1 To 10 If Min a(j)Then Min=a(j)t=a(i):a(i)=a(j):a(j)=t End If Next jNext iLabel2.Caption=For i=1 To 10 Label2.Caption=Label2.Caption&a(i)&Next iEnd Sub14.双双击击“降序排列降序排列”命令按命令按钮钮,进进入代入代码编辑码编辑窗口,窗口,输输入如下代入如下代码码:Private Sub Command2_Click()For i=1 To 9 Max=a(i)For j=i+1 To 10 If Max x(j)Thentemp=x(i):x(i)=x(j):x(j)=tempEndIfNextjNextiFori=1To5Printx(i);NextiEndSub16.
展开阅读全文