September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
|
|
@ -1,50 +1,50 @@
|
|||
import extensions.
|
||||
import system'math.
|
||||
import system'routines.
|
||||
import extensions;
|
||||
import system'math;
|
||||
import system'routines;
|
||||
|
||||
extension $op
|
||||
extension op
|
||||
{
|
||||
cocktailSort
|
||||
[
|
||||
var list := self clone.
|
||||
cocktailSort()
|
||||
{
|
||||
var list := self.clone();
|
||||
|
||||
bool swapped := true.
|
||||
bool swapped := true;
|
||||
while(swapped)
|
||||
[
|
||||
swapped := false.
|
||||
{
|
||||
swapped := false;
|
||||
|
||||
0 to(list length - 2) do(:i)
|
||||
[
|
||||
for(int i := 0, i <= list.Length - 2, i += 1)
|
||||
{
|
||||
if (list[i]>list[i+1])
|
||||
[
|
||||
list exchange(i,i+1).
|
||||
swapped := true.
|
||||
]
|
||||
].
|
||||
{
|
||||
list.exchange(i,i+1);
|
||||
swapped := true
|
||||
}
|
||||
};
|
||||
ifnot (swapped)
|
||||
[
|
||||
{
|
||||
^ list
|
||||
].
|
||||
swapped := false.
|
||||
};
|
||||
swapped := false;
|
||||
|
||||
(list length - 2) to(0) do(:i)
|
||||
[
|
||||
for(int i := list.Length - 2, i >= 0, i -= 1)
|
||||
{
|
||||
if (list[i]>list[i+1])
|
||||
[
|
||||
list exchange(i,i+1).
|
||||
swapped := true.
|
||||
]
|
||||
].
|
||||
].
|
||||
{
|
||||
list.exchange(i,i+1);
|
||||
swapped := true
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
^ list
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
program =
|
||||
[
|
||||
var list := (3, 5, 1, 9, 7, 6, 8, 2, 4 ).
|
||||
public program()
|
||||
{
|
||||
var list := new int[]{3, 5, 1, 9, 7, 6, 8, 2, 4 };
|
||||
|
||||
console printLine("before:", list).
|
||||
console printLine("after :", list cocktailSort).
|
||||
].
|
||||
console.printLine("before:", list.asEnumerable());
|
||||
console.printLine("after :", list.cocktailSort().asEnumerable())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
extension Collection where Element: Comparable {
|
||||
public func cocktailSorted() -> [Element] {
|
||||
var swapped = false
|
||||
var ret = Array(self)
|
||||
|
||||
guard count > 1 else {
|
||||
return ret
|
||||
}
|
||||
|
||||
repeat {
|
||||
for i in 0...ret.count-2 where ret[i] > ret[i + 1] {
|
||||
(ret[i], ret[i + 1]) = (ret[i + 1], ret[i])
|
||||
swapped = true
|
||||
}
|
||||
|
||||
guard swapped else {
|
||||
break
|
||||
}
|
||||
|
||||
swapped = false
|
||||
|
||||
for i in stride(from: ret.count - 2, through: 0, by: -1) where ret[i] > ret[i + 1] {
|
||||
(ret[i], ret[i + 1]) = (ret[i + 1], ret[i])
|
||||
swapped = true
|
||||
}
|
||||
} while swapped
|
||||
|
||||
return ret
|
||||
}
|
||||
}
|
||||
|
||||
let arr = (1...10).shuffled()
|
||||
|
||||
print("Before: \(arr)")
|
||||
print("Cocktail sort: \(arr.cocktailSorted())")
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
Function cocktail_sort(ByVal s As Variant) As Variant
|
||||
Dim swapped As Boolean
|
||||
Dim f As Integer, t As Integer, d As Integer, tmp As Integer
|
||||
swapped = True
|
||||
f = 1
|
||||
t = UBound(s) - 1
|
||||
d = 1
|
||||
Do While swapped
|
||||
swapped = 0
|
||||
For i = f To t Step d
|
||||
If Val(s(i)) > Val(s(i + 1)) Then
|
||||
tmp = s(i)
|
||||
s(i) = s(i + 1)
|
||||
s(i + 1) = tmp
|
||||
swapped = True
|
||||
End If
|
||||
Next i
|
||||
'-- swap to and from, and flip direction.
|
||||
'-- additionally, we can reduce one element to be
|
||||
'-- examined, depending on which way we just went.
|
||||
tmp = f
|
||||
f = t + (d = 1)
|
||||
t = tmp + (d = -1)
|
||||
d = -d
|
||||
Loop
|
||||
cocktail_sort = s
|
||||
End Function
|
||||
|
||||
Public Sub main()
|
||||
Dim s(9) As Variant
|
||||
For i = 0 To 9
|
||||
s(i) = CStr(Int(1000 * Rnd))
|
||||
Next i
|
||||
Debug.Print Join(s, ", ")
|
||||
Debug.Print Join(cocktail_sort(s), ", ")
|
||||
End Sub
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
5000 CLS
|
||||
5002 LET a$="": FOR f=1 TO 64: LET a$=a$+CHR$ (32+INT (RND*96)): NEXT f
|
||||
5004 PRINT a$; AT 10,0;"ZigZag BubbleSORT"
|
||||
5010 LET la=LEN a$
|
||||
5011 LET i=1: LET u=0
|
||||
5020 LET d=0: LET p=(u=0)-(u=1)
|
||||
5021 LET l=(i AND u=0)+(la-i+u AND u=1)
|
||||
5030 IF u=0 THEN IF a$(l+1)>=a$(l) THEN GO TO 5050
|
||||
5031 IF u=1 THEN IF a$(l-1)<=a$(l) THEN GO TO 5050
|
||||
5040 LET d=1
|
||||
5042 LET t$=a$(l+p)
|
||||
5043 LET a$(l+p)=a$(l)
|
||||
5044 LET a$(l)=t$
|
||||
5050 LET l=l+p
|
||||
5051 PRINT AT 10,21;a$(l);AT 12,0;a$
|
||||
5055 IF l<=la-i AND l>=i THEN GO TO 5023
|
||||
5061 LET i=i+NOT u
|
||||
5063 LET u=NOT u
|
||||
5064 IF d AND i<la THEN GO TO 5020
|
||||
5072 PRINT AT 12,0;a$
|
||||
9000 STOP
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
5000 CLS : PRINT ;"Jumping Zig Zag BubbleSORT"'"aka Sticky Cocktail Sort"
|
||||
5002 LET a$="": FOR f=1 TO 96: LET a$=a$+CHR$ (48+INT (RND*48)): NEXT f
|
||||
5004 PRINT 'a$
|
||||
5010 LET a=LEN a$: LET i=1: LET u=0: LET up=0: LET do=0
|
||||
|
||||
5020 LET d=0: LET p=(NOT u)-u: LET l=(i AND NOT u)+(a AND u)
|
||||
|
||||
5030 IF NOT u THEN IF a$(l+1)>=a$(l) THEN GO TO 5060
|
||||
5031 IF u THEN IF a$(l-1)<=a$(l) THEN GO TO 5060
|
||||
5040 LET w=l+p: GO SUB 5400
|
||||
|
||||
5060 IF up THEN IF a<LEN a$ THEN IF a$(l)=a$(a+1) THEN LET w=a: GO SUB 5400: GO SUB 5500
|
||||
5061 IF do THEN IF i>1 THEN IF a$(l)=a$(i-1) THEN LET w=i: GO SUB 5400: GO SUB 5500
|
||||
|
||||
5100 LET l=l+p
|
||||
5150 PRINT AT 10,0;a$(l);AT 12,0;a$
|
||||
5151 PRINT AT 21,0;i;a$(i),a;a$(a)
|
||||
5155 IF NOT u THEN IF l<a THEN GO TO 5030
|
||||
5156 IF u THEN IF l>i THEN GO TO 5030
|
||||
|
||||
5170 LET do=up=1: LET up=1
|
||||
5261 LET i=i+u: LET a=a-NOT u: LET u=NOT u
|
||||
5264 IF d AND i<a THEN GO TO 5020
|
||||
|
||||
5272 PRINT AT 12,0;a$
|
||||
5399 STOP
|
||||
|
||||
5400 LET d=1: LET t$=a$(w): LET a$(w)=a$(l): LET a$(l)=t$: RETURN
|
||||
|
||||
5500 IF a+1<=LEN a$ THEN IF a$(a)=a$(a+1) THEN LET a=a-1: GO TO 5500
|
||||
5510 IF i-1>=1 THEN IF a$(i)=a$(i-1) THEN LET i=i+1: GO TO 5500
|
||||
5520 RETURN
|
||||
9999 CLEAR : SAVE "JZZB" LINE 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue