quickSort
Timon Gehr
timon.gehr at gmx.ch
Tue Sep 13 19:12:01 PDT 2011
On 09/14/2011 03:34 AM, hdsh wrote:
> this my try
>
> int[] quickSort(int[] arr) {
> int[] result = quickSort(filter!(arr< arr[0])(arr)) ~ arr[0] ~
> quickSort(filter!(arr> arr[0])(arr));
> }
>
> but it fail to compile
Note that this approach is an inefficient way of implementing a sorting
routine.
This works:
int[] quickSort(int[] arr) {
if(!arr.length) return [];
return quickSort(array(filter!((a){return a < arr[0];})(arr))) ~
arr[0] ~
quickSort(array(filter!((a){return a > arr[0];})(arr)));
}
I'll go quickly through how I fixed it:
int[] quickSort(int[] arr) {
if(!arr.length) return []; // base case for recursion
return // return statement for giving back a result
quickSort(array( // turn the lazy filter range into an array
filter!(
(a){return a < arr[0];} // delegate literal passed to filter
)(arr))) ~ arr[0] ~
quickSort(array(filter!(
(a){return a >= arr[0];} //allow multiple elements that are
equal to the pivot element
)(arr[1..$]))); // only include the pivot once
}
If you have particular questions about this solution, feel free to ask.
More information about the Digitalmars-d-learn
mailing list