void main() {
List<int> nums = [18,3,65, 45, 7, 5, 9, 12, 34, 8, 9];
quickSort(nums, 0, nums.length -1);
print(nums);
}
quickSort(List<int> nums, int left, int right) {
if(left>=right) return;
int pivot = findPivot(nums, left, right);
quickSort(nums, left, pivot -1);
quickSort(nums, pivot +1, right);
}
findPivot(List<int> nums, int left, int right) {
int base = left;
int l = left;
int r = right;
while(l<r){
while(l<r&& nums[r]>= nums[base]) r--;
while(l<r&& nums[l]<= nums[base]) l++;
swip(nums, l, r);
}
swip(nums, base, l);
return l;
}
swip(List<int> nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}