The code helps the choose the first element as the pivot in the partition subroutine.
package com.me.algo.sort;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class QuickSort1Approach2 {
private static long totalComparisons;
/**
* @param args
*/
public static void main(String[] args) {
List<Long> input = getInputFromFile();
System.out.println("Input Size :: " + input.size() );
System.out.println(" INPUT ");
for(Long number : input){
System.out.print(number + ", ");
}
System.out.println();
quickSort(input, 0, input.size()-1);
System.out.println(" OUTPUT ");
for(Long number : input){
System.out.print(number + ", ");
}
System.out.println();
System.out.println(" Total Number Of Comparisons " + totalComparisons);
}
public static void quickSort(List<Long> input, int left, int right){
int currentIndex = partitionWithFirstPivot(input, left, right);
if(left < currentIndex - 1){
quickSort(input, left, currentIndex-1);
totalComparisons = totalComparisons + (currentIndex - 2 - left);
}
if(right > currentIndex + 1){
quickSort(input, currentIndex + 1, right);
totalComparisons = totalComparisons + (right - currentIndex);
}
}
public static int partitionWithFirstPivot(List<Long> input, int left, int right){
long pivot = input.get(left);
int i = left + 1;
for(int j = left+1; j <= right; j++){
if(input.get(j) < pivot){
long temp = input.get(j);
input.set(j, input.get(i));
input.set(i, temp);
i++;
}
}
input.set(left, input.get(i-1));
input.set(i-1, pivot);
return i - 1;
}
private static List<Long> getInputFromFile(){
List<Long> input = new ArrayList<Long>();
//String filePath = "D:/AlgorithmSpace/Algo/src/com/me/algo/sort/input_01.txt";
String filePath = "D:/AlgorithmSpace/Algo/src/com/me/algo/sort/QuickSortInput_02.txt";
Scanner scanner = null;
try{
scanner = new Scanner(new File(filePath));
}catch(FileNotFoundException fnfe){
System.out.println("File does not exist!!");
System.exit(0);
}
while(scanner.hasNext()){
Long data = scanner.nextLong();
System.out.println(data);
input.add(data);
}
scanner.close();
return input;
}
}
package com.me.algo.sort;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class QuickSort1Approach2 {
private static long totalComparisons;
/**
* @param args
*/
public static void main(String[] args) {
List<Long> input = getInputFromFile();
System.out.println("Input Size :: " + input.size() );
System.out.println(" INPUT ");
for(Long number : input){
System.out.print(number + ", ");
}
System.out.println();
quickSort(input, 0, input.size()-1);
System.out.println(" OUTPUT ");
for(Long number : input){
System.out.print(number + ", ");
}
System.out.println();
System.out.println(" Total Number Of Comparisons " + totalComparisons);
}
public static void quickSort(List<Long> input, int left, int right){
int currentIndex = partitionWithFirstPivot(input, left, right);
if(left < currentIndex - 1){
quickSort(input, left, currentIndex-1);
totalComparisons = totalComparisons + (currentIndex - 2 - left);
}
if(right > currentIndex + 1){
quickSort(input, currentIndex + 1, right);
totalComparisons = totalComparisons + (right - currentIndex);
}
}
public static int partitionWithFirstPivot(List<Long> input, int left, int right){
long pivot = input.get(left);
int i = left + 1;
for(int j = left+1; j <= right; j++){
if(input.get(j) < pivot){
long temp = input.get(j);
input.set(j, input.get(i));
input.set(i, temp);
i++;
}
}
input.set(left, input.get(i-1));
input.set(i-1, pivot);
return i - 1;
}
private static List<Long> getInputFromFile(){
List<Long> input = new ArrayList<Long>();
//String filePath = "D:/AlgorithmSpace/Algo/src/com/me/algo/sort/input_01.txt";
String filePath = "D:/AlgorithmSpace/Algo/src/com/me/algo/sort/QuickSortInput_02.txt";
Scanner scanner = null;
try{
scanner = new Scanner(new File(filePath));
}catch(FileNotFoundException fnfe){
System.out.println("File does not exist!!");
System.exit(0);
}
while(scanner.hasNext()){
Long data = scanner.nextLong();
System.out.println(data);
input.add(data);
}
scanner.close();
return input;
}
}
No comments:
Post a Comment