mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
74 lines
2.0 KiB
Plaintext
74 lines
2.0 KiB
Plaintext
/*
|
|
* This file is part of the X10 project (http://x10-lang.org).
|
|
*
|
|
* This file is licensed to You under the Eclipse Public License (EPL);
|
|
* You may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.opensource.org/licenses/eclipse-1.0.php
|
|
*
|
|
* (C) Copyright IBM Corporation 2006-2014.
|
|
*/
|
|
|
|
|
|
/**
|
|
* Straightforward quicksort implementation using
|
|
* naive partition-in-the-middle and not bothering with
|
|
* well-known optimizations such as using insertion sort
|
|
* once the partitions get small. This is only intended
|
|
* as a simple example of an array-based program that
|
|
* combines a recirsive divide and conquer algorithm
|
|
* with async and finish, not as a highly efficient
|
|
* sorting procedure..
|
|
*/
|
|
public class QSort {
|
|
|
|
private static def partition(data:Rail[int], left:long, right:long) {
|
|
var i:long = left;
|
|
var j:long = right;
|
|
var tmp:int;
|
|
var pivot:long = data((left + right) / 2);
|
|
|
|
while (i <= j) {
|
|
while (data(i) < pivot) i++;
|
|
while (data(j) > pivot) j--;
|
|
if (i <= j) {
|
|
tmp = data(i);
|
|
data(i) = data(j);
|
|
data(j) = tmp;
|
|
i++;
|
|
j--;
|
|
}
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
public static def qsort(data:Rail[int], left:long, right:long) {
|
|
index:long = partition(data, left, right);
|
|
finish {
|
|
if (left < index - 1)
|
|
async qsort(data, left, index - 1);
|
|
|
|
if (index < right)
|
|
qsort(data, index, right);
|
|
}
|
|
}
|
|
|
|
public static def main(args:Rail[String]) {
|
|
val N = args.size>0 ? Long.parse(args(0)) : 100;
|
|
val r = new x10.util.Random();
|
|
val data = new Rail[int](N, (long)=>r.nextInt(9999n));
|
|
qsort(data, 0, N-1);
|
|
for (i in 0..(N-1)) {
|
|
Console.OUT.print(data(i));
|
|
if (i%10 == 9) {
|
|
Console.OUT.println();
|
|
} else {
|
|
Console.OUT.print(", ");
|
|
}
|
|
}
|
|
Console.OUT.println();
|
|
}
|
|
}
|
|
|