vb交换排序法

vb交换排序法

private sub command1_click()

dim a as single,b as single,c as single a=val(text1.text)

b=val(text2.text)

c=val(text3.text)

if b>a then

d=a:a=b:b=d

end if

if c>a then

d=a:a=c:c=d

end if

if c>b then

d=b:b=c:c=d

end if

label1.caption=a

label2.caption=b

label3.caption=c

end sub

VB常用的算法——排序

VB常考算法(八)排序: 1、算法 1)选择法排序 算法说明:根据上例中求最小值的思路,我们可以使用如下方法进行从小到大排序:第一轮,以第一个元素逐个跟后面的所有元素比较,如果比后面的元素大就进行交换,经过一轮比较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进行比较确定下次小的元素;以此类推… 下面我们以图形的形式体现对5个数进行选择排序的过程: 第一轮:第二轮: 第三轮: 从上图可以发现对5个元素进行排序,总共经过了5-1=4轮,而每一轮中比较的次数也不相同,第一轮2、3、4、5号元素参与跟1号元素的比较,共4次,第二轮3、4、5号元素参与跟2号元素的比较,共3次,以次类推,比较次数逐步减少。经过四轮的比较,利用逐步求最小值的方法将5个数从小到大排好序。对于这样一个排序的过程,我们可以使用两个循环分别控制比较的轮数和每一轮的次数。 程序代码: Private Sub Command1_Click() Dim n As Integer n = InputBox("请输入数组元素的个数:") Dim a() As Integer, i As Integer, j As Integer Print "排序前:" ReDim a(n) For i = 1 To n a(i) = Int(Rnd * (99 - 10 + 1) + 10) Print a(i); 最小值 次小值

Next i For i = 1 To n - 1 For j = i To n If a(i) > a(j) Then temp = a(i) '交换元素 a(i) = a(j) a(j) = temp End If Next j Next i Print Print "排序后:" For i = 1 To n Print a(i); Next i End Sub 2)冒泡法排序 算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大,则将它们进行交换,具体思路:设在数组a 中存放n 个元素,第一轮,将a(1)和a(2)进行比较,若a(1)>a(2),则交换这两个元素的值,然后继续用a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了n 个数中最大的值;第二轮,用a(1)与a(2),a(2)与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一轮下来,a(n-1)中存放n 个数中第二大的值;…;第n-1轮,a(1)与a(2)进行比较处理,确保最小值在a(1)中。经过n-1轮比较处理,n 个数已经按从小到大的顺序排列好。 下面我们以图形的形式体现对5个数进行冒泡排序的过程: 第一轮: 第三轮: 第四轮: 最大值

交换排序和归并排序

1、交换排序 1)气泡排序(bubble sorting) 也是一种简单排序方法,T(n)=O(n2) 算法:A[n],第一次排序区间为A[0]~A[n-1],第二次排序区间为A[1]~A[n-1,]…,最后一次排序区间为A[n-2]~A[n-1],每次排序轻者上浮,即排序区间最小者交换到排序区间的第一个位置,经n-1次排序。完成排序过程。 Example 1 #include using namespace std; struct ET { int x; }; void select(ET A[],int n) { ET e; for(int i=0;iA[j].x) { e=A[i]; A[i]=A[j]; A[j]=e; } } } }

void display(ET a[],int n) { for(int i=0;i

冒泡排序 交换排序

选择排序和冒泡排序都是基于元素交换的,因此你的分类错误 冒泡排序基本思想:每次将最重的一个沉入海底 选择排序基本思想:每次扫描最重的一个与第一个交换 并且,选择和冒泡的时间复杂度是一样的(都是O(N^2)) 应用交换排序基本思想的主要排序方法有:冒泡排序(Bubble sort)和快速排序(Quick sort)。交换排序 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。下面是java语言实现一个交换排序的函数: public class BubbleSort { public static int[] BubbleSort(int[] array){ for(int i = 0; i < array.length - 1; i++){ for(int j = 0; j < array.length - 1 - i; j++){ // 内部循环的边界要比长度小一 if(array[j] > array[j + 1]){ //相邻的两个元素比较,将大的放到最右边 int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } return array; } public static void main(String[] args) { int[] array = { 25, 36, 21, 45, 98, 13}; System.out.println(Arrays.toString(array)); BubbleSort.bubbleSort(array);// 调用快速排序的方法 System.out.println(Arrays.toString(array));// 打印排序后的数组元素 }

高中信息技术 VB排序算法与程序实现 浏览题阅览题 会考复习题

高中信息技术VB排序算法与程序实现浏览题阅览题会考 复习题 学校:___________姓名:___________班级:___________考号:___________ 一、选择题 (一)顺序查找数据:我们假定被查找的数据存储在有n个元素的数组变量d中,要寻找的一个特定的数据(这个数据称为查找键)已经存储在变量key中。 下面是顺序查找算法的输入输出说明。 输入:查找键(设在变量key中)。被查找的数据(设在数组变量d中)。 输出:若找到,输出值为key的数据所在的数组元素的下标,记为i; 若未找到,输出结果为提示字符串:"找不到"。 当在n=8个元素的数组里顺序查找数据的示意图如下: 找到情况未找到情况 总结顺序查找数据结果判断条件: (1)、当找到时,肯定i<="8," n个数据时,肯定i<=n,i即为找到的数组元素下标,d(i)=key; (2)、当"找不到"时,i=9>8了;n个数据时,当i=n+1时,表示"找不到"。 顺序查找的主程序段如下: Private Sub 顺序查找_Click() n个数据放入d(1)到d(n)中 Key =" Val(Text1.Text):" i =1.‘变量Key从文本框Text1取的数要查找的数; Do While ① i =" i" + 1

Loop If i <=" n" Then Text2.Text = "在d(" + Str(i) + ")中" ‘例如在文本框Text2显示:“在d(6)中” Else Text2.Text = "找不到" End If End Sub 上程序Do While的条件① 是() A.Key <> d(i) B.i <= n C.Key <> d(i) And i <= n D.Key <> d(i) or i <= n 【答案】C 【解析】 2.用选择排序将七个数“2022、2017、2018、2014、2021、2012、2015”从小到大进行排序,则第二轮交换数据后的顺序是: A、2022、2021、2018、2017、2014、2012、2015 B、2012、2014、2018、2017、2021、2022、2015 C、2012、2017、2018、2014、2021、2022、2015 D、2022、2021、2018、2014、2017、2012、2015 【答案】D 【解析】 3.关于对分查找和顺序查找算法的叙述,正确的是()。 A.顺序查找需要排序,效率低;对分查找不需要排序,效率高。 B.顺序查找不需要排序,效率低;对分查找需要排序,效率高。 C.顺序查找不需要排序,效率高;对分查找需要排序,效率低。 D.顺序查找需要排序,效率高;对分查找不需要排序,效率低。 【答案】B 【解析】

交换排序

成绩评定表

课程设计任务书

目录 一、题目概述(内容及要求) (4) 二、功能分析 (4) 三、设计 (6) 四、运行与测试 (9) 五、总结 (10) 参考文献 (11)

一、题目概述(内容及要求) 实验内容: 输入数据对数据按菜单选择对数据进行交换排序。 实验要求: 1.菜单列出所有交换排序。 2.对数据按菜单选择的进行排序。 3.统计比较和交换的次数。 二、功能分析 1.交换排序: 分为冒泡排序和快速排序 2.交换排序算法分析 (1)冒泡排序 基本思想:设排序表中有n个数据元素。首先对排序表中第一,二个数据元素的关键字arr[0]和arr[1]进行比较。如果前者大于后者,则进行交换;然后对第二,三个数据做同样的处理;重复此过程直到处理完最后两个相邻的数据元素。我们称之为一趟冒泡,它将关键字最大的元素移到排序表的最后一个位置,其他数据元素一般也都向排序的最终位置移动。然后进行第二趟排序,对排序表中前n-1个元素进行与上述同样的操作,其结果使整个排序表中关键字次大的数据元素被移到arr[n-2]的位置。如此最多做n-1趟冒泡就能把所有数据元素排好序。 (2)快速排序 基本思想:快速排序(Quick Sort)又被称做分区交换排序,这是一种平均性能非常好的排序方法。 其算法基本思想是:任取排序表中的某个数据元素(例如取第一个数据元素)作为基准,按照该数据元素的关键字大小,将整个排序表划分为左右两个子表:左侧子表中所有数据元素的关键字都小于基准数据元素的关键字。右侧子表中所有数据元素的关键字都大于或等于基准数据元素的关键字,基准数据元素则排在这两个子表中间(这也是该数据元素最终应安放的位置),然后分别对这两个子表重复施行上述方法的快速排序,直到所有的子表长度为1,则排序结束。

四种排序方法简单理解

第十四次交换: 3 22 53 72 11 10 34 44 11 15 28 65…… 第二趟排序: 3 10 22 53 72 11 34 44 11 15 28 65第三趟排序: 3 10 11 22 53 72 11 34 44 15 28 65…… 最后趟排序: 3 10 11 11 15 22 28 34 44 53 65 72代码实现如下: //powerd by 一意行者 #include #define M 100 using namespace std; int main () { int a[M]; int n,i,j; int temp=0; //定义一个用于大小数的交换的中间变量 cin>>n; for(i=0;i>a[i]; //初始化数组 } for(i=0;ii;j--) if(a[j]

第十五次交换: 3 10 11 15 72 53 44 34 28 22 11 65第十六次交换: 3 10 11 11 72 53 44 34 28 22 15 65第四趟排序: 3 10 11 11 72 53 44 34 28 22 15 65第十七次交换: 3 10 11 11 53 72 44 34 28 22 15 65…… 最后趟排序: 3 10 11 11 15 22 28 34 44 53 65 72 //powerd by 一意行者 #include #define M 100 using namespace std; int main () { int a[M]; int n,i,j; int temp=0; //定义一个用于大小数的交换的中间变量 while(cin>>n) { for(i=0;i>a[i]; //初始化数组 } for(i=0;ia[j]) { temp=a[j]; a[j]=a[i];//将大数放到后面 a[i]=temp; } } for(i=0;i

vb 排序程序1

Option Explicit Dim Sums(9999) As Long, Sumb(9999) As Long '生成数据数量可自己设置 Private blnSort As Boolean '排序方向Private Declare Function SendMessageFind Lib "User32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wmsg As Long, ByVal wparam As Integer, ByVal lparam As String) As Long Private Declare Function timeGetTime Lib "winmm.dll" () As Long Dim T As Long Private Sub Command1_Click() Dim i As Long, z As Long, j As Long List1.Clear DoEvents List1.Visible = False For i = 0 To UBound(Sums) nn: Randomize z = 99999 * Rnd + 9 j = SendMessageFind(List1.hWnd, &H18F, 0, z) If j > -1 Then GoTo nn Else Sums(i) = z Sumb(i) = z List1.AddItem Sums(i) End If Next List1.Visible = True Me.Caption = "共产生数据:" & UBound(Sums) + 1 & " 项" End Sub Private Sub Command2_Click() Dim ti As Integer, i As Long List2.Clear DoEvents For i = 0 To UBound(Sumb) Sums(i) = Sumb(i) Next

VB算法总结

VB算法总结: 1、最大公约数算法说明 1)最大公约数: 用辗转相除法求两自然数m、n的最大公约数。 (1)首先,对于已知两数m、n,比较并使得m>n; (2)m除以n得余数r; (3)若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4) (4)m n n r 再重复执行(2) 譬如:10与5 分析步骤:m=10 n=5 r=m mod n=0 所以n(n=5)为最大公约数 24与9 分析步骤:m=24 n=9 r=m mod n=6 r≠0 m=9 n=6 r=m mod n=3 r≠0 m=6 n=3 r=m mod n=0 所以n(n=3)为最大公约数 算法实现 Private Function GCD(ByVal m As Long, ByVal n As Long) As Long Dim temp As Long If m < n Then temp = m: m = n: n = temp

Dim r As Long Do r = m Mod n If r = 0 Then Exit Do m = n n = r Loop GCD = n End Function 2)最小公倍数 m×n÷最大公约数 3)互质数 最大公约数为1的两个正整数

2、素数算法说明 素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。 判别某数m是否是素数的经典算法是: 对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。 Private Function prime(ByVal n%) As Boolean Dim i % prime=true For i = 2 To sqr(n) If n Mod I = 0 Then Prime=false Exit For endif Next I End Function

选择法排序

将n个数从小到大排序 选择法排序的算法: 第1轮:从n个数中查找最小的数与第1个数交换位置; 第2轮:从n-1个数中查找次小的数与第2个数交换位置; 第3轮:从n-2个数中查找第3小的数与第3个数交换位置;……….. 第n-1轮:从2个数中查找较小的数交换到n-1位置 所以n个数共进行n-1轮的查找,第i轮中两两比较的次数是n-i #define N 15 #include void main() /*主函数*/ { void enter(int a[]); void selectsort(int a[]); void print(int a[]); int a[N]; enter(a); selectsort(a); print(a); }

void enter(int a[]) /*输入数据函数*/ { int i; printf("enter the data:\n"); for(i=0;i

{ med=a[p]; a[p]=a[i]; a[i]=med; } } } void print(int a[]) /*输出函数*/ { int i; printf("\nthe sorted data:\n"); for(i=0;i

高中学考选考VB常用算法

程序设计的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a(1 to 100)存放产生的确100个随机整数,数组x(1 to 10)来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x(1)中,个位是2的个数存放在x(2)中,……个位是0的个数存放在x(10)。 将程序编写在一个GetTJput过程中,代码如下: Public Sub GetTJput() Dim a(1 To 100) As Integer Dim x(1 To 10) As Integer Dim i As Integer, p As Integer '产生100个[0,99]范围内的随机整数,每行10个打印出来 For i = 1 To 100 a(i) = Int(Rnd * 100) If a(i) < 10 Then Form1.Print Space(2); a(i); Else Form1.Print Space(1); a(i); End If If i Mod 10 = 0 Then Form1.Print Next i '统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数,并将统计结果保存在数组x(1),x(2),...,x(10)中,将统计结果打印出来 For i = 1 To 100 p = a(i) Mod 10 ' 求个位上的数字 If p = 0 Then p = 10 x(p) = x(p) + 1 Next i Form1.Print "统计结果" For i = 1 To 10 p = i If i = 10 Then p = 0 Form1.Print "个位数为" + Str(p) + "共" + Str(x(i)) + "个" Next i End Sub 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数) (1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r;

实验三、交换标志位法排序

实验名称:三、数据块排序实验日期:2010.5.29得分: 同组人:不填指导教师:马惠兰 一、实验目的 1.熟练掌握Keil uvision3单片机仿真软件的使用方法。 2.进一步熟悉单片机实验操作步骤。 3.掌握分别用双循环法、交换标志位法和求极值法实现数据块排序的编程方法和技巧。 4.掌握Keil uvision3软件内RAM单元数据查看和修改的命令和方法。 二、实验设备 PC机一台 三、实验内容 在起始地址为60H的内RAM数据存储区中,连续存放有10个无符号数,编程将其由大到小排序。 四、实验原理 本人采用交换标志位法实现上述实验内容。 用交换标志位法实现无符号数据块排序,需要设置一个交换标志位,实验中选择PSW的b5位——F0,F0=0表示数据比较大小时没有交换,F0=1表示数据比较大小时有交换。循环初始化置F0为0,第1次大循环数据块中的10数据两两比较9次,两个数据比较大小,若第一个数大于第二个数,则不变,若第一个数小于第二个数,则交换,并且置F0=1;这样比较到最后,最后一个单元中存放的应该是参加排序的数据块中最小的数据。然后判断F0的状态,若F0=0,则说明一次交换都没有,数据块已经排好序了;若F0=1,则说明至少有一次交换,数据块还没有排好序,需要继续进行排序操作。 第2次大循环时,F0又置初值0,但参加排序的数据只有9个(10个数据中的最小数已经排在了最后一个单元),循环次数变成了8次,循环结束后同样判断F0的状态,以判断数据块是否排好序,是否再进行排序操作。如此循环,直到某一次大循环结束后,判断发现F0为0时,则说明数据块排好序了。 用交换标志位法实现无符号数据块排序,必须注意一种情况,就是最后只剩下最上面的两个数据排序时,若比较后交换标志位F0=1,排序也结束,因为所有数据都排序好了。这种情况两个数据的比较次数等于用双循环法排序时两个数据的比较次数。 根据此实验原理编写的实验源程序清单见附页。 五、实验步骤 1.在F盘下为工程建立文件夹马惠兰3; 2.新建工程项目文件马惠兰 3.uv2,保存在文件夹马惠兰3中,并为工程选择目标器件为 SST89E554RC; 3.编辑源程序,建立源文件马惠兰3.ASM,保存在文件夹马惠兰3中; 4.将源文件马惠兰3.ASM添加到工程项目组中; 5.设置调试环境,选择调试模式为软件模拟; 6.加载程序,打开存储器窗口,在地址栏中输入:“D:60H”回车,修改内RAM60H单 元开始的10个单元数据,运行程序,根据预习设计的数据记录表格记录实验数据;7.修改源程序,将指令“JNC NEXT”改为“JC NEX T”,保存、汇编后重新加载运 行程序,记录实验数据; 8.实验数据经过实验指导教师检查正确后,实验结束。 实验数据记录见附页。 六、实验结果分析(自己写) 七、心得体会(自己写)

奇偶交换排序

数据结构上机实验报告题目:奇偶交换排序 学生姓名 学生学号 学院名称计算机学院 专业计算机科学与技术 时间 2015.01.13

目录 第一章需求分析 (1) 1.1 原题表述 (1) 1.2 问题解决方案 (1) 第二章概要设计 (2) 2.1 抽象数据类型 (2) 2.2 主要算法描述 (2) 2.3 主要算法分析 (3) 第三章详细设计 (4) 3.1 程序代码 (4) 第四章调试分析 (6) 4.1 出现的问题及解决方法 (6) 第五章测试分析 (7) 5.1 测试样例 (7)

第一章需求分析 1.1原题表述 奇偶交换排序是另一种交换排序。算法的基本思想如下:排序过程通过对文件x[i](l≤i≤n)的若干次扫描来完成,第奇数次扫描,对所有下标为奇数的记录x[i]与其后面的记录x[i+1](l≤i≤n–1)相比较,若x[i].KEY(记录x[i]的key值)>x[i+1].KEY,则交换x[i]和x[i+1]的内容; 第偶数次扫描,对所有下标为偶数的记录x[i]与其后面的记录x[i+1](2≤i≤n–1)相比较,若x[i].KEY>x[i+1].KEY,则交换x[i]和x[i+1]之内容。一趟奇数次扫描和一趟偶数次扫描被称为一趟奇偶扫描。重复上述过 程直到排序完成为止。 设计奇偶排序函数,对于任意输入元素,输出排序过程。 1.2 问题解决方案 题目需要建立建立一种新的排序方式,奇数趟对数组中的所有奇数项扫描,偶数趟对序列中的所有偶数项扫描。若A[i] > A[i+1],则交换它们。 如此反复,最后得出排好的序列为止,最后的终止条件是进行一趟排序对比时,不在出现A[i] > A[i+1]的情况

解题报告poj1674交换排序

Sorting by Swapping Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5760 Accepted: 3033 Description Given a permutation of numbers from 1 to n, we can always get the sequence 1, 2, 3, ..., n by swapping pairs of numbers. For example, if the initial sequence is 2, 3, 5, 4, 1, we can sort them in the following way: 2 3 5 4 1 1 3 5 4 2 1 3 2 4 5 1 2 3 4 5 Here three swaps have been used. The problem is, given a specific permutation, how many swaps we needs to take at least. Input The first line contains a single integer t (1 <= t <= 20) that indicates the number of test cases. Then follow the t cases. Each case contains two lines. The first line contains the integer n (1 <= n <= 10000), and the second line gives the initial permutation. Output For each test case, the output will be only one integer, which is the least number of swaps needed to get the sequence 1, 2, 3, ..., n from the initial permutation. Sample Input 2 3 1 2 3 5 2 3 5 4 1 Sample Output

VB写的快速排序算法

VB写的快速排序算法 快速排序算法(递归算法) Public Sub QuickSort(ByRef aStrSort() As String, ByVal lngleft As Long, ByVal lngright As Long) Dim i As Long Dim j As Long Dim temp As String i = lngleft j = lngright temp = aStrSort(i) NextStep: Do Until i >= j While (aStrSort(j) > temp And j > i) j = j - 1 Wend If j > i Then aStrSort(i) = aStrSort(j) aStrSort(j) = temp i = i + 1 End If While (aStrSort(i) < temp And j > i) i = i + 1 Wend If j > i Then aStrSort(j) = aStrSort(i) aStrSort(i) = temp j = j - 1 End If Loop If lngleft < i - 1 Then QuickSort aStrSort, lngleft, i - 1 If lngright > i + 1 Then QuickSort aStrSort, i + 1, lngright End Sub '二分法查找算法(查找失败返回-1,数组下标从0开始)

Public Function BinSearch(ByRef strElement() As String, ByVal strKey As String) As Long Dim lngLow As Long Dim lngHigh As Long Dim lngMiddle As Long lngLow = 0 lngHigh = UBound(strElement) While (lngLow <= lngHigh) lngMiddle = (lngLow + lngHigh) / 2 If strElement(lngMiddle) = strKey Then BinSearch = lngMiddle Exit Function Else If strElement(lngMiddle) > strKey Then lngHigh = lngMiddle - 1 Else lngLow = lngMiddle + 1 End If End If Wend BinSearch = -1 '查找失败 End Function

(完整版)VB常用算法——排序

VB 常考算法(八)排序: 1、算法 1)选择法排序 算法说明:根据上例中求最小值的思路, 一轮,以第一个元素逐个跟后面的所有元素比较, 轮比 较,第一个元素被确定为最小;同样的方法,下一轮以第二个元素跟剩下的所有元素进 行比较确定下次小的元素;以此类推… 下面我们以图形的形 式体现对 第一轮: 第二轮: 素参与跟2号元素的比较,共 3次,以次类推,比较次数逐步减少。经过四轮的比较,利用 逐步求最小值的方法将 5个数从小到大排好序。 对于这样一个排序的过程, 我们可以使用两 个循环分别控制比较的轮数和每一轮的次数。 程序代码: Private Sub Comma nd1_Click() Dim n As In teger n = In putBox(" 请输入数组元素的个数: ") Dim a() As In teger, i As In teger, j As In teger Print " 排序前:” 我们可以使用如下方法进行从小到大排序: 第 如果比后面的元素大就进行交换, 经过一 1 6 4 2 5 最小值 次小值 5个数进行选择排序的过程: 第三轮:

ReDim a(n) For i = 1 To n a(i) = In t(R nd * (99 -10 + 1) + 10) Print a(i);

Next i For i = 1 To n - 1 For j = i To n If a(i) > a(j) Then temp = a(i)' a(i) = a(j) a(j) = temp End If Next j Next i Print Print " 排序后:" For i = 1 To n Print a(i); Next i End Sub 2)冒泡法排序 算法说明:相邻的元素进行比较,如果前面的元素比后面的元素大, 则将它们进行交换, 具体思路:设在数组 a 中存放n 个元素,第一轮,将 a(1)和a(2)进行比较,若a(1)>a(2), 则交换这两个元素的值,然后继续用 a(2)和a(3)比较,若a(1)>a(2),则交换这两个元素 的值,以此类推,直到a(n-1)和a(n)进行比较处理后,a(n)中就存放了 n 个数中最大的值; 第二轮,用 a(1)与a(2),a(2) 与a(3),…,a(n-2)与a(n-1)进行比较,处理方法相同,这一 轮下来,a(n-1)中存放n 个数 中第二大的值;…;第 n-1轮,a(1)与a(2)进行比较处理, 确保最小值在a(1)中。经过n-1轮比较处理,n 个数已经按从小到大的顺序排列好。 2 1 p j 1 1 1 1 2 2 2 2 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 程序代码: Private Sub Comma nd1_Click() Dim n As In teger n = In putBox(" 请输入数组元素的个数: ") 交换元素 F 面我们以图形的形式体现对 5个数进行冒泡排序的过程: 第一轮: 最大值

vb常用排序法

冒泡法: (1) 从第一个元素开始,将相邻的数比较,若为逆序,就交换,比较完一轮,最大的数已沉底,成为数组中的最后一个元素a(n) (2) 对a(1)和a(n-1)的n-1个数进行同(1)的操作,次大的数放入a(n-1)中,完成第二轮排序。 (3) 进行n-1轮排序,所有的数排序完毕。 Dim a%(), i%, j%, n% For i = 1 To n - 1 For j = 1 To n - i If a(j) > a(j + 1) Then t = a(j): a(j) = a(j + 1): a(j + 1) = t End If Next j Next i Print For i = 1 To n Print a(i); Next i 顺序交换法: (1) 从第一个元素开始,将它和其后的每个元素进行比较,若为逆序,就交换,比较完一轮,a(1)成为数组中的最小的元素。 (2) 对a(2)和a(n)的n-1个数进行同(1)的操作,次小的数放入a(2)中,完成第二轮排序。 (3) 进行n-1轮排序,所有的数排序完毕。 Dim a%(), i%, j%, n% For i = 1 To n - 1 For j = i + 1 To n If a(i) > a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next j Next i

选择法 (1) 从n个数的序列中选出最小的数,与第1个数交换位置; (2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置; (3) 重复(1)n-1遍,最后构成递增序列。 Dim a%(), i%, j%, n% For i = 1 To n – 1 k=i For j = i + 1 To n If a(j) < a(k) Then k=j Next j if k<>i then t=a(i): a(i)=a(k): a(k)=t Next i 插入法: 1. 找到插入数在数组中的位置i 2. 将从n到i的每个元素向后移动一个位置 3. 插入数 插入法1:将一个数插入到有序数列,使插入后数列仍然有序Dim a(1 To 10) As Integer Key = Val(InputBox("输入一个数")) For i=1 to 9 If a(i)>Key Then Exit For next i For k = 9 To i Step -1 a(k + 1) = a(k) Next k a(i) = Key 插入法2:用上面的插入方法将一批数排序(从小到大),设数列中开始只有一个元素。 Dim x(1 To 10) As Integer For i = 1 To 9 Key = x(i + 1) j = 1 Do While (Key >= x(j) And j <= i) j = j + 1 Loop For k = i To j Step -1 x(k + 1) = x(k) Next k x(j) = Key Next i

vb常用控件习题(含答案)

1.下列控件中没有Caption属性的是 ________。 A)框架 B)列表框 C)复选框 D)单选按钮 2.复选框的Value 属性为 1 时,表示 ________。 A)复选框未被选中 B)复选框被选中 C)复选框内有灰色的勾 D)复选框操作有误 3.用来设置斜体字的属性是 ________。 A)FontItalic B)FontBold C)FontName D)FontSize 4.将数据项“China”添加到列表框List1中成为第二项应使用 ________语句。 A)“China”,1 B)“ China ”, 2 C) 1,“China” D) 2,“ China ” 5.引用列表框List1最后一个数据项,应使用 ________语句。 A)) B)(ListCount) C)) D)(ListCount-1) 6.假如列表框List1有四个数据项,那么把数据项“China”添加到列表框的最后,应使用 ________语句。 A) 3,“ China ” B)“ China ”, C)“ China ”, 3 D)“China”, 7.执行了下面的程序后,列表框中的数据项有________。 Private Sub Form_Click() For i = 1 to 6 i Next i For i = 1 to 3 i Next i End Sub A)1,5,6 B)2,4, 6 C )4,5,6 D)1,3,5 8.如果列表框List1中没有选定的项目,则执行 语句的结果是 ________。 A)移去第一项 B)移去最后一项 C)移去最后加入列表中的一项 D)以上都不对 9.如果列表框List1中只有一个项目被用户选定,则执行 )语句的结果是________。 A)在Debug窗口输出被选定的项目的索引值 B)在Debug窗口输出True C)在窗体上输出被选定的项目的索引值 D)在窗体上输出True 10.在窗体上画一个名称为List1的列表框,一个名称为Label1的标签,列表框中显示若干城市的名称。但单击列表框中的某个城市名时,该城市名从列表框中消失,并在标签中显示出来。下列能正确实现上述操作的程序是______。 A)Private Sub List1_Click()

VB几种排序算法的比较设计报告

几种排序算法的比较设计报告学院班级学号姓名成绩 一、设计思路 1.要达到的目的 ①启动时可以对初始的几个数值进行排序 ②随机生成比较多的整数。要求数值在一个整数的所有范围内生成 ③对于基本要求的排序方法可实现生序,冒泡排序。 ④可以计算排序的初始时间和结束时间以及排序所用时间 ⑤实现使用选择排序,冒泡排序 ⑥可以比较几种排序算法的循环次数 ⑦支持的背景设置,可以设置成任意色彩 ⑧增加插入排序,快速排序 ⑨增加希而排序,桶排序 ⑩增加堆排序 2.关键问题的解决 ①随机生成多个整数,并放入数组中 ②排序时间的计算 ③循环次数的计算 ④几种排序算法的基本思想 二、模块之间的调用关系,或程序流程图 三、部分程序关键源代码及注释 Select Case Combo2.ListIndex Case 0 For i = 1 To n

For j = 1 To n - 1 If m(j) > m(j + 1) Then B = m(j): m(j) = m(j + 1): m(j + 1) = B End If a = a + 1 Next j,i Case 1 For i = 1 To n - 1 imin = i For j = i + 1 To n If m(imin) > m(j) Then imin = j a = a + 1 Next j B = m(i): m(i) = m(imin): m(imin) = B Next i End Select 四、设计方案的完善及目前存在的问题 1.设计方案要完善的地方 ①增加捅排序 ②增加堆排序 2. 目前存在的问题 ①无捅排序 ②无堆排序 ③耗时有时不准 五、本次设计的收获及心得体会 本次设计我收获很多,学到了很多以前没有学到过的有关VB的知识。并把所学知识用到了实践上了。对VB的基本控件和算法有了更深一步的了解。 六、对该题目和VB设计的意见和建议 1. 对该题目的意见和建议 排序算法太多了,有点乱,有好多方法还没有真正掌握。总的来说题目设计的很好。 2.对本次设计的意见和建议 没有告诉学生捅排序和排序的基本思路。

相关文档
最新文档