Question: 1 . Please check and fix error below: Output: The original array: [ ] The original list: The list is empty. The sorted list: The

1. Please check and fix error below:
Output:
The original array: [] The original list: The list is empty. The sorted list: The list is empty. The original array: [1,1,1,1,1,1,1] The original list: 1->1->1->1->1->1->1 The sorted list: 1->1->1->1->1->1->1 The original array: [10,8,-4,89,2,0,4,-19,200] The original list: 10->8->-4->89->2->0->4->-19->200 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 201 out of bounds for length 46 at ListOnArray_23123456d_GigiYimMingHay.quicksort(Main.java:56) at ListOnArray_23123456d_GigiYimMingHay.quicksort(Main.java:77) at ListOnArray_23123456d_GigiYimMingHay.quicksort(Main.java:51) at ListOnArray_23123456d_GigiYimMingHay.main(Main.java:113)
2. Note:
Here's the code. other classes don't need to be heavily changed as that is the default setting !!!
The tasks that I wrote were the quicksort and partitions. Check this part mainly.
import java.util.Arrays;
import java.security.SecureRandom;
* Simulating a linked list with an array.
*
*/
public class ListOnArray_23123456d_GigiYimMingHay {
private int[] data;
int size;
public ListOnArray_23123456d_GigiYimMingHay(int n){
size =(n +1)<<1;
data = new int[size];
data[0]=0; // Head index
for (int i =2; i < size -2; i +=2)
data[i]= i +1; // Next pointers
data[size -2]=0; // End of list
data[size -1]=1; // Tail index
}
public boolean isEmpty(){
return data[0]==0;
}
public boolean isFull(){
return data[size -1]==0;
}
public void err(){
System.out.println("Oops...");
}
public void insertFirst(int x){
if (isFull()){ err(); return; }
int i = data[size -1];
data[size -1]= data[i +1];
data[i +1]= data[0];
data[0]= i;
data[i]= x;
}
public void quicksort(){
if (!isEmpty()){
quicksort(0, data[size -1]);
}
}
private void quicksort(int prevIndex, int headIndex){
if (headIndex ==0|| data[headIndex +1]==0) return;
int pivotValue = data[headIndex];
int leftTail = prevIndex;
int current = data[headIndex +1];
int last = headIndex;
while (current !=0){
if (data[current]< pivotValue){
int next = data[current +1];
data[current +1]= data[leftTail +1];
data[leftTail +1]= current;
leftTail = current;
current = next;
} else {
last = current;
current = data[current +1];
}
}
data[last +1]=0; // Properly terminate the list for the last segment
quicksort(prevIndex, data[prevIndex +1]);
quicksort(headIndex, data[headIndex +1]);
}
public String toString(){
if (isEmpty()) return "The list is empty.";
StringBuilder sb = new StringBuilder();
int i = data[0];
sb.append(data[i++]);
while (data[i]!=0){
i = data[i];
sb.append("->").append(data[i++]);
}
return sb.append("").toString();
}
public static void main(String[] args){
int[][] testData ={
{},
{1,1,1,1,1,1,1},
{10,8,-4,89,2,0,4,-19,200},
{5,4,3,2,1,1,0,0,-1},
{1,2,3,4,5,6,7,8,9,10,11},
{1,3,2,6,7,5,4,12,13,15,14,10,11,9,8},
{3,2,6,13,8,4,10,7,14,11,12,5,9},
{65,85,17,88,66,71,45,38,95,48,18,68,60,96,55},
{10,8,14,89,32,50,77,38}
};
for (int[] a : testData){
int n = a.length;
SecureRandom random = new SecureRandom();
ListOnArray_23123456d_GigiYimMingHay list = new ListOnArray_23123456d_GigiYimMingHay(n + random.nextInt(1+(n <<2)));
System.out.println("The original array: "+ Arrays.toString(a));
for (int i = n -1; i >=0; i--) list.insertFirst(a[i]);
System.out.println("The original list: "+ list);
list.quicksort();
System.out.println("The sorted list: "+ list);
}
}
}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!