快考高程了,大家说说这几种排序方法,搞的头痛啊

sunzhiying888 2003-10-10 10:29:43
快考高程了,大家说说这几种排序方法,搞的头痛啊
直接选择排序和快速排序
冒泡排序我知道了
如: 541 132 984 746 518 181 946 314 205 827
...全文
51 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kestrelmoon 2003-10-11
  • 打赏
  • 举报
回复
Sub BubbleSortNumbers(iArray As Variant)'冒泡
Dim lLoop1 As Long
Dim lLoop2 As Long
Dim lTemp As Long
For lLoop1 = UBound(iArray) To LBound(iArray) Step -1
For lLoop2 = LBound(iArray) + 1 To lLoop1
If iArray(lLoop2 - 1) > iArray(lLoop2) Then
lTemp = iArray(lLoop2 - 1)
iArray(lLoop2 - 1) = iArray(lLoop2)
iArray(lLoop2) = lTemp
End If
Next lLoop2
Next lLoop1
End Sub

Sub SelectionSortNumbers(vArray As Variant)‘选择
Dim lLoop1 As Long
Dim lLoop2 As Long
Dim lMin As Long
Dim lTemp As Long
For lLoop1 = LBound(vArray) To UBound(vArray) - 1
lMin = lLoop1
For lLoop2 = lLoop1 + 1 To UBound(vArray)
If vArray(lLoop2) < vArray(lMin) Then lMin = lLoop2
Next lLoop2
lTemp = vArray(lMin)
vArray(lMin) = vArray(lLoop1)
vArray(lLoop1) = lTemp
Next lLoop1
End Sub

Sub ShellSortNumbers(vArray As Variant)’Shell快速
Dim lLoop1 As Long
Dim lHold As Long
Dim lHValue As Long
Dim lTemp As Long
lHValue = LBound(vArray)
Do
lHValue = 3 * lHValue + 1
Loop Until lHValue > UBound(vArray)
Do
lHValue = lHValue / 3
For lLoop1 = lHValue + LBound(vArray) To UBound(vArray)
lTemp = vArray(lLoop1)
lHold = lLoop1
Do While vArray(lHold - lHValue) > lTemp
vArray(lHold) = vArray(lHold - lHValue)
lHold = lHold - lHValue
If lHold < lHValue Then Exit Do
Loop
vArray(lHold) = lTemp
Next lLoop1
Loop Until lHValue = LBound(vArray)
End Sub
sdmltyj 2003-10-11
  • 打赏
  • 举报
回复
不会吧/1

我晕.不会这就是我们国家的高程人员吧,
难怪日本人说我们国家的考试不合格了,
我明天也考高程,
只能祝你们好运了!
xiaoliou 2003-10-11
  • 打赏
  • 举报
回复
晕!要考高城的人了基本算法不会?
汗...
xjb2001 2003-10-10
  • 打赏
  • 举报
回复
丢死人了;
这么垃圾的算法;
sunzhiying888 2003-10-10
  • 打赏
  • 举报
回复
这样是冒泡排序啊
pigsanddogs 2003-10-10
  • 打赏
  • 举报
回复

do while left <= right
do while arr(left)<mid : left = left+1 : loop
do while arr(right)>mid : right = right-1 : loop
loop

---->


do while left <= right
do while arr(left)<mid : left = left+1 : loop
do while arr(right)>mid : right = right-1 : loop
swap (left, right)
loop
pigsanddogs 2003-10-10
  • 打赏
  • 举报
回复
1 : 直接选择排序
从所有数中找到最大值,然后跟第一个数交换,,然后从余下数中找到最大值,跟第2个交换。。
'// 10 个数
for i = 0 to 8
for j = i +1 to 9
if arr(i) < arr(j) then swap(i,j)
next j
next i


2: 快速排序
寻找一个中间数(一般可以取数序列中间位置数), 设置2个index,分别指向最左和最右
先从左边开始, 一旦发现left(index)>=mid 就停止,否则继续查找,然后从右边开始 一旦发现
right(index)<=mid 就停止,否则继续查找, 2个都找到, 就交换2个数
然后继续恢复左边查找, 停止的依据是left.index > right.index
这样数字以left.index(right.index)为分割符(前部分都小于等于中间数字,后部分都大于等于中间数),左边数序列跟右边数序列递归排序, 结合一起就是有序数列
public function sort(byval left as long, byval right as long, arr() as long)
dim old_left as long, old_right as long, mid as long
old_left = left: old_right = right
mid = arr((left + right) /2)
do while left <= right
do while arr(left)<mid : left = left+1 : loop
do while arr(right)>mid : right = right-1 : loop
loop
call sort(old_left, right)
call sort(left, old_right)
end

3: 冒泡排序
从第一个数开始跟相邻数比较,大的数上浮,小的下沉, 经过一轮循环,最大数浮到了顶端
然后从余下的数字继续开始浮动。
'// 10 个数
for i = 0 to 8
for j = 0 to 8-i
if arr(j) > arr(j+1) then swap(j,j+1)
next j
next i



其中快速排序最难,但效率最高, 冒泡效率大于选择排序,而且更容易理解。
Mars.CN 2003-10-10
  • 打赏
  • 举报
回复
dim a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,T as Integer

a1=541
a2=132
a3=984
a4=764
a5=518
a6=181
a7=946
a8=314
a9=205
a10=827

if a1>a2 then
a2=T
a2=a1
a1=t
end if

if a2>a3 then
a3=T
a3=a2
a2=t
end if
.
.
.
if a9>a10 then
a10=T
a10=a9
a9=T
end if
如此重复,可得到从小到大的排序
(可能不行,但大概是这样,自己想想吧)
suolong@sjzsoft.com
sunzhiying888 2003-10-10
  • 打赏
  • 举报
回复
快告诉我
flc 2003-10-10
  • 打赏
  • 举报
回复
haha
up
龙华 2003-10-10
  • 打赏
  • 举报
回复
呵呵
szyhy810518 2003-10-10
  • 打赏
  • 举报
回复

'排序 冒泡
Private Function ArrSort_MP(arrLng() As Long) As Long

Dim lngI As Long
Dim lngJ As Long
Dim lngK As Long '记录最后交换位置
Dim lngU As Long
Dim lngTemp As Long

lngU = UBound(arrLng)
For lngI = 1 To lngU
lngK = lngI + 1
For lngJ = lngU To lngI Step -1
If arrLng(lngJ - 1) > arrLng(lngJ) Then
lngTemp = arrLng(lngJ - 1)
arrLng(lngJ - 1) = arrLng(lngJ)
arrLng(lngJ) = lngTemp
lngK = lngJ
End If
Next
lngI = lngK - 1
Next

End Function

'排序 选择
Private Function ArrSort_XZ(arrLng() As Long) As Long

Dim lngI As Long
Dim lngJ As Long
Dim lngU As Long
Dim lngTemp As Long

lngU = UBound(arrLng)
For lngI = 0 To lngU - 1
lngTemp = arrLng(lngI)
For lngJ = lngI + 1 To lngU
If lngTemp > arrLng(lngJ) Then
lngTemp = arrLng(lngJ)
End If
Next
arrLng(lngI) = lngTemp
Next

End Function
juit 2003-10-10
  • 打赏
  • 举报
回复
for (i=0;i<10;i++)
{for (j=0;j<10-i-1;j++)
{if(a[j]<a[j+1])
{z=a[j];
a[j]=a[j+1];
a[j+1]=z;
}
}
}
看上去,就是每一次拿当前要比较的值与其后面所有值相比较,把最大的或是最小的放到这个当前位置。如:9 5 2 7 1 8 3 ,位置为1,就拿第一位后面的所有数与它比较,如果是升序的话,就把最小的放到前面。所以第一趟后就变为:1 9 7 2 8 3 ,然后就是第2位,这样,每次把最小的一个放到前面去,最后就是有序的了。

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧