我坚持我的程序的最后部分,涉及比较两个单独的排序算法。
我无法在我的主要内容中调用我的其他两个课程,我不完全确定原因。
import java.util.Random;
import java.util.Arrays;
import java.util.Scanner;
// Implement two separate sorting classes
// Compare both classes and see how they stack up
// based off their results.
//QuickSort + BubbleSort
public class a8main{
public static void main(String[] args)
{
Scanner userInput = new Scanner(System.in);
System.out.println("Type in array size.");
System.out.println("5,000 10,000 30,000");
int input = userInput.nextInt();
//Test smaller arrays starting at 5,000
//Test larger arrays. (30,000 or more)
byte[] c = new byte[input];
new Random().nextBytes(c);
//Begin QuickSorting + BubbleSorting
for (int j=1;j<6;j++)
{
byte[] c1 = Arrays.copyOfRange(c, 0, 5000*j);
long startTime = System.currentTimeMillis();
quickSort(c1,0,5000*j-1);
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
byte[] c2 = Arrays.copyOfRange(c, 0, 5000*j);
startTime = System.currentTimeMillis();
bubbleSort(c2);
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("Amount of time taken for first array "+5000*j+" elements for quickSort: "+totalTime+" miliseconds.");
System.out.println("Amount of time taken for second array "+5000*j+" elements for bubbleSort: "+totalTime+" miliseconds.");
}
} }
我在这里有主要代码,我将包括我的其他两个课程,只是为了给你一个关于我在这里处理的内容的线索。
public class bubbleSort
{
static void bubbleSorter(byte[] args)
{
int n = args.length;
byte temp = 0;
for(int i=0; i < n;i++)
{
for(int j=1; j < (n-i); j++)
{
if(args[j-1] > args[j])
{
temp = args[j-1];
args[j-1] = args[j];
args[j] = temp;
}
}
}
} }
冒泡排序
public class quickSort
{
static void quickSorter(byte[]args,int low,int high)
{
if (args == null || args.length == 0)
return;
if (low >= high)
return;
int center = low + (high - low) / 2;
byte pivot = args[center];
int i = low, j = high;
while (i <= j)
{
while (args[i] < pivot)
{
i++;
}
while (args[j] > pivot)
{
j--;
}
}
if (low < j)
quickSorter(args, low, j);
if (high > i)
quickSorter(args, i, high);
}
}
和QuickSort
我做错了什么? 我只需要一些线索。
答案 0 :(得分:0)
您需要按类名称调用方法,因为您将它们定义为静态方法,如此
quickSort.quickSorter(parameter1,parameter2,parameter3);
bubbleSort.bubbleSorter(parameter);
答案 1 :(得分:0)
你有一些问题。
首先,Java建议使用PascalCase作为类名;例如,BubbleSort
。方法名称是像bubbleSorter
这样的驼峰案例。这种方式更容易阅读。
其次,您在endTime
totalTime
方法中重新声明了Main
和main()
。在long
方法调用后,取出bubbleSorter()
前的public class BubbleSort
{
private BubbleSort() {
//This is a static class - no instantiation needed
}
public static void bubbleSorter(byte[] args)
{
int n = args.length;
byte temp = 0;
for (int i = 0; i < n; i++)
{
for (int j = 1; j < (n - i); j++)
{
if (args[j - 1] > args[j])
{
temp = args[j - 1];
args[j - 1] = args[j];
args[j] = temp;
}
}
}
}
}
。
第三,你应该强制你的静态类有一个私有的构造函数。如果有人试图初始化私有构造函数,有些人会抛出异常。这只能在课堂上完成,所以我选择只写一个评论,因为人们可以删除异常。
第四,调用类的静态方法时,需要包含静态方法的类。当你在这个答案的第一点时,这将更容易阅读。
这是你的课程的样子。
冒泡排序类:
public class QuickSort
{
private QuickSort() {
//This is a static class - no instantiation needed
}
public static void quickSorter(byte[]args,int low,int high)
{
if (args == null || args.length == 0)
return;
if (low >= high)
return;
int center = low + (high - low) / 2;
byte pivot = args[center];
int i = low, j = high;
while (i <= j)
{
while (args[i] < pivot)
{
i++;
}
while (args[j] > pivot)
{
j--;
}
}
if (low < j)
quickSorter(args, low, j);
if (high > i)
quickSorter(args, i, high);
}
}
快速排序类:
public class Main {
public static void main(String[] args) {
Scanner userInput = new Scanner(System.in);
System.out.println("Type in array size.");
System.out.println("5,000 10,000 30,000");
int input = userInput.nextInt();
//Test smaller arrays starting at 5,000
//Test larger arrays. (30,000 or more)
byte[] c = new byte[input];
new Random().nextBytes(c);
//Begin QuickSorting + BubbleSorting
for (int j=1;j<6;j++)
{
byte[] c1 = Arrays.copyOfRange(c, 0, 5000*j);
long startTime = System.currentTimeMillis();
QuickSort.quickSorter(c1,0,5000*j-1);
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
byte[] c2 = Arrays.copyOfRange(c, 0, 5000*j);
startTime = System.currentTimeMillis();
BubbleSort.bubbleSorter(c2);
endTime = System.currentTimeMillis();
totalTime = endTime - startTime;
System.out.println("Amount of time taken for first array "+5000*j+" elements for quickSort: "+totalTime+" miliseconds.");
System.out.println("Amount of time taken for second array "+5000*j+" elements for bubbleSort: "+totalTime+" miliseconds.");
}
}
}
主要类别:
function dateDiff(startingDate, endingDate) {
var startDate = new Date(new Date(startingDate).toISOString().substr(0, 10));
if (!endingDate) {
endingDate = new Date().toISOString().substr(0, 10); // need date in YYYY-MM-DD format
}
var endDate = new Date(endingDate);
if (startDate > endDate) {
var swap = startDate;
startDate = endDate;
endDate = swap;
}
var startYear = startDate.getFullYear();
var february = (startYear % 4 === 0 && startYear % 100 !== 0) || startYear % 400 === 0 ? 29 : 28;
var daysInMonth = [31, february, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var yearDiff = endDate.getFullYear() - startYear;
var monthDiff = endDate.getMonth() - startDate.getMonth();
if (monthDiff < 0) {
yearDiff--;
monthDiff += 12;
}
var dayDiff = endDate.getDate() - startDate.getDate();
if (dayDiff < 0) {
if (monthDiff > 0) {
monthDiff--;
} else {
yearDiff--;
monthDiff = 11;
}
dayDiff += daysInMonth[startDate.getMonth()];
}
return yearDiff + 'Y ' + monthDiff + 'M ' + dayDiff + 'D';
}