Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d321928

Browse files
author
Harry Dulaney
committed
ch 23 ex 4
1 parent 836264d commit d321928

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

‎ch_23/Exercise23_04.java‎

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
* first, middle, and last elements in the list.
99
*/
1010
public class Exercise23_04 {
11-
public static void main(String[] args) {
12-
int[] list = {2, 3, 2, 5, 6, 1, -2, 3, 14, 12};
13-
quickSort(list);
14-
System.out.println("Sorted List: \n" + Arrays.toString(list));
11+
public static void quickSort(int[] list) {
12+
/* Exercise 23.4 */
13+
intmedianIdx = indexOfMedian(list);
14+
quickSort(list, medianIdx, list.length - 1);
1515
}
1616

1717
public static void quickSort(int[] list, int first, int last) {
@@ -22,18 +22,12 @@ public static void quickSort(int[] list, int first, int last) {
2222
}
2323
}
2424

25-
public static void quickSort(int[] list) {
26-
quickSort(list, 0, list.length - 1);
27-
}
28-
2925
/**
3026
* Partition the array list[first..last]
3127
*/
3228
public static int partition(int[] list, int first, int last) {
33-
/* Exercise 23_04 */
34-
int pivotIdx = findMedian(list, first, last);
35-
int pivot = list[pivotIdx];
36-
int low = first; // Index for forward search
29+
int pivot = list[first]; // Choose the first element as the pivot
30+
int low = first + 1; // Index for forward search
3731
int high = last; // Index for backward search
3832

3933
while (high > low) {
@@ -58,33 +52,40 @@ public static int partition(int[] list, int first, int last) {
5852

5953
// Swap pivot with list[high]
6054
if (pivot > list[high]) {
61-
list[pivotIdx] = list[high];
55+
list[first] = list[high];
6256
list[high] = pivot;
6357
return high;
6458
} else {
65-
return pivotIdx;
59+
return first;
6660
}
6761
}
6862

6963
/**
70-
* Exercise 23.04 solution
7164
*
72-
* @param list current list
73-
* @param first current left index
74-
* @param last current right index
75-
* @return index of the median between first, last, and mid index values
65+
* @param list int array to find median of first, middle and last nums
66+
* @return the index of the median value
7667
*/
77-
static int findMedian(int[] list, int first, int last) {
78-
int midIdx = (first + last) / 2;
79-
int firstVal = list[first];
80-
int lastVal = list[last];
81-
int midVal = list[midIdx];
82-
int max = Math.max(Math.max(firstVal, lastVal), midVal);
83-
int min = Math.min(Math.min(firstVal, lastVal), midVal);
84-
if (midVal != min && midVal != max) return midIdx;
85-
else if (lastVal != min && lastVal != max) return last;
86-
else return first;
68+
static int indexOfMedian(int[] list) {
69+
int[] temp = {list[0], list[list.length / 2], list[list.length - 1]};
70+
Arrays.sort(temp);
71+
if (list[0] == temp[1]) {
72+
return 0;
73+
}
74+
else if (list[list.length / 2] == temp[1]) {
75+
return list.length / 2;
76+
}
77+
78+
return list.length - 1;
79+
}
8780

81+
/**
82+
* A test method
83+
*/
84+
public static void main(String[] args) {
85+
int[] list = {2, 3, 2, 5, 6, 1, -2, 3, 14, 12};
86+
quickSort(list);
87+
for (int i = 0; i < list.length; i++)
88+
System.out.print(list[i] + " ");
8889
}
8990
}
9091

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /