编写函数sort()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写函数sort()相关的知识,希望对你有一定的参考价值。

其功能是将形参一维数组按照从小到大排序。编写程序。定义一维数组,输入一维数组元素值。调用sort()函数排序 。并输出排序后的一维数组
能帮我做出来的 一定还加分哦!不过一定要正确清晰!

'其功能是将形参一维数组按照从小到大排序
'。编写程序。定义一维数组,输入一维数组元素值。
'调用sort()函数排序 。并输出排序后的一维数组
Dim a(100) As Integer
Private Sub sort(ByVal s As Integer, ByVal t As Integer)
If s >= t Then Exit Sub
i = s
j = t
r = Int((i + j) / 2)
Key = a(r)

While i < j
While a(i) < Key '不取等号 即遇到相同大小的数字也不跳过 对其处理(如取等号 则跳过,不对其处理)
i = i + 1
Wend

While a(j) > Key
j = j - 1
Wend

If i <= j Then '取等号 即i、j两指针重合时也对其处理 防止程序死循环
temp = a(i)
a(i) = a(j)
a(j) = temp
i = i + 1
j = j - 1
End If
Wend

Call sort(s, j)
Call sort(i, t)
End Sub

Private Sub Command1_Click()
For i = 1 To 100
Randomize
a(i) = Int(Rnd * 100 + 1)
Next

Call sort(1, 100)

For i = 1 To 100
Print a(i);
If i Mod 10 = 0 Then Print
Next
End Sub
参考技术A 三种排序哈
Public Sub Swap(ByRef a, ByRef b)
'交换

Dim t
t = a: a = b: b = t
End Sub

Public Sub BubbleSort(ByRef a, Optional ByVal Left, Optional ByVal Right)
'起泡排序
'基本思想是:比较相邻的两个记录,逆序则交换。
'这样的做法导致小的关键码一层层的浮上来,因此得名。

Dim i As Integer, j As Integer

If IsMissing(Left) Then Left = LBound(a)
If IsMissing(Right) Then Right = UBound(a)

For i = Left To Right - 1
For j = Right To i + 1 Step -1
If a(j - 1) > a(j) Then Swap a(j - 1), a(j)
Next j
Next i
End Sub

Public Sub SelectSort(ByRef a, Optional ByVal Left, Optional ByVal Right)
'选择排序
'基本思想是:每次选出第i小的记录,放在第i个位置。
'i的起点是Left。当i=Right-1时就排完了。

Dim i As Integer, j As Integer
Dim k As Integer

If IsMissing(Left) Then Left = LBound(a)
If IsMissing(Right) Then Right = UBound(a)

For i = Left To Right - 1
k = i
For j = i + 1 To Right
If a(k) > a(j) Then k = j
Next j
If k <> i Then Swap a(k), a(i)
Next i

End Sub

Public Sub QuickSort(ByRef a, Optional ByVal Left, Optional ByVal Right)
If IsMissing(Left) Then Left = LBound(a)
If IsMissing(Right) Then Right = UBound(a)
QuickSort2 a, Left, Right
End Sub

Private Sub QuickSort2(ByRef a, ByVal Left As Integer, ByVal Right As Integer)
'快速排序
'基本思想是:任取待排序列的某个记录作为基准,
'按照该关键码大小,将整个序列分成两个序列——
'左侧的所有记录的关键码都比基准小(或者等),
'右侧的都比基准大,基准则放在两个子序列之间,
'显然这时基准放在了最后应该放置的位置。
'分别对左右子序列重复上面的过程,直到最后所有的记录都放在相应的位置。

Dim i As Integer, j As Integer
Dim x

i = Left
j = Right
x = a((Left + Right) / 2)

Do While (i <= j)
Do While (a(i) < x And i < Right)
i = i + 1
Loop
Do While (x < a(j) And j > Left)
j = j - 1
Loop
If (i <= j) Then
Swap a(i), a(j)
i = i + 1
j = j - 1
End If
Loop

If (Left < j) Then QuickSort2 a, Left, j
If (i < Right) Then QuickSort2 a, i, Right

End Sub
参考技术B Private Function 排序(原数组() As Single, 新数组() As Single) As Boolean
For i = LBound(原数组) To UBound(原数组)
新数组(i) = 原数组(i)
Next i
For i = LBound(新数组) To UBound(新数组) - 1
For j = i + 1 To UBound(新数组)
If 新数组(j) < 新数组(i) Then
t = 新数组(i)
新数组(i) = 新数组(j)
新数组(j) = t
End If
Next j
Next i
End Function

Private Sub Command1_Click() '调试举例
Dim a(10) As Single, b(10) As Single
For i = 0 To 10
a(i) = Rnd * 100
Print a(i),
Next i
Print
排序 a, b
For i = 0 To 10
Print b(i),
Next i
End Sub

自己编写JavaScript的sort函数

  在平常开发中我们经常会遇到对数组进行排序的场景,js给我们提供了sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序,请看下面例子:

var a = [1, 3, 2, 4];
var b = [‘b‘, ‘a‘, ‘c‘, ‘d‘]; a.sort();
b.sort(); console.log(a);
// [1, 2, 3, 4]
console.log(b); // [‘a‘, ‘b‘, ‘c‘, ‘d‘]

  但有些时候我们需要自己定义排序要求,这时候我们就可以给sort函数传递一个函数,用来自定义排序规则,请看下面例子:

var a = [1, 3, 2, 4];

a.sort(function compare(a, b) {
   return b - a;
});
console.log(a);  // [4, 3, 2, 1]

  这是一个简单的自定义例子,把数组进行了降序排序,对于传给sort方法的函数function compare(a,b){...} ,遵循这样一个规则:若返回正数,则说明a和b需要交换,否则不交换。基于这个准则我们就可以根据自己需求来确定交不交换。请看下面代码:

function compare(a, b) {
    if () {       //如果不想交换,则返回-1
        return -1;
    }
    return 1;  //返回1表示想交换
}

  这样的话a和b交换还是不交换完全取决于你自己的逻辑。  你说了算嘻嘻!!

  如果有什么不正确的地方,还请各位大腿指正!!!!

 





以上是关于编写函数sort()的主要内容,如果未能解决你的问题,请参考以下文章

自己编写JavaScript的sort函数

编写一个函数SORT将放到一位数组中的若干个数安从小到大的顺序排序

编写一个sort函数,对一维数组的前n个元素从小到大排序

要求编写一自定义函数sort,完成对n个字符串的降序排序?

C语言. .编写一个Sort函数,完成对整型数组元素升序排列。

求C语言编程编写函数sort:对数组a中的数进行从小到大排序