Bellow code snippet errors with:
"Type mismatch: cannot convert from element type Object to Integer".
public static List<Integer> quickSort(List<Integer> arr) {
if(arr.size() == 1) {
return arr;
}
int mid = arr.size() / 2;
List left = Arrays.asList(arr).subList(0, mid);
List right = Arrays.asList(arr).subList(mid, arr.size());
Collections.sort(left);
Collections.sort(right);
for (Integer x : left) {
right.add(x);
}
return arr;
}
>Solution :
There’s a logic bug, Arrays.asList(arr) actually creates a list of lists List<List<Integer>> while it looks like what you want is a List where arr already is one..
Also you need to properly parameterize List left and List right as List<Integer> otherwise it’s treated as default type Object.
public static List<Integer> quickSort(List<Integer> arr) {
if(arr.size() == 1) {
return arr;
}
int mid = arr.size() / 2;
List<Integer> left = arr.subList(0, mid);
List<Integer> right = arr.subList(mid, arr.size());
Collections.sort(left);
Collections.sort(right);
for (Integer x : left) {
right.add(x);
}
return arr;
}
EDIT: also returning arr in the return statement means your function does nothing as it just spits out the unedited input.