Quellcode durchsuchen

[lua] add simple sorting algorithm to base Aray type, rather than using stable sort

Justin Donaldson vor 9 Jahren
Ursprung
Commit
3d085a3087
1 geänderte Dateien mit 21 neuen und 1 gelöschten Zeilen
  1. 21 1
      std/lua/_std/Array.hx

+ 21 - 1
std/lua/_std/Array.hx

@@ -78,8 +78,28 @@ class Array<T> {
 		}
 		return ret;
 	}
+
+	// TODO: copied from neko Array.sort, move to general util library?
 	public function sort( f : T -> T -> Int ) : Void {
-		return haxe.ds.ArraySort.sort(this,f);
+		var i = 0;
+		var l = this.length;
+		while( i < l ) {
+			var swap = false;
+			var j = 0;
+			var max = l - i - 1;
+			while( j < max ) {
+				if( f(this[j],this[j+1]) > 0 ) {
+					var tmp = this[j+1];
+					this[j+1] = this[j];
+					this[j] = tmp;
+					swap = true;
+				}
+				j += 1;
+			}
+			if( !swap )
+				break;
+			i += 1;
+		}
 	}
 	public function splice( pos : Int, len : Int ) : Array<T> {
 		if (len < 0 || pos > length) return [];