Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

首先需要明确,输入规模在算法效率分析过程中,是一个很重要的问题。因为,显然,在算法相同、计算机硬件相同的条件下,算法输入规模越大,运行时间越长(比如,数组越大,对数组排序需要的时间越长)。因此,算法效率和输入规模$n$紧密关联。

那么,如何确定这个**输入规模$n$**呢?
那么,如何确定这个**输入规模$n$** 呢?

在大多数情况下,这是显而易见的。例如,对于排序、查找等列表相关的算法,输入规模$n$就是列表的长度。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,37 @@

public class BubbleSort extends SortAlgorithm
{
/**
* Sorts the input array.
*
* @param array Array to be sorted.
*/
public void sort(int[] array) {

for (int i = 0; i < array.length-1 ; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
// check if we need to swap
// 交换
if (array[j] > array[j+1]) {
new Thread(new Runnable() {
public void run() {
while (true) {
test();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void test() {
// TODO Auto-generated method stub
}
public Runnable start() {
// TODO Auto-generated method stub
return null;
}
}.start());
Integer temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}

} // end of sort()

} // end of class BubbleSort
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
//SelectionSort.java
import java.util.ArrayList;
public class SelectionSort extends SortAlgorithm
{

/**
* Sort array.
*
* @param array Array to be sorted.
*/
public void sort(int[] array) {
// IMPLEMENT ME
for (int i = 0; i < array.length - 1; ++i)
{
int min = i;
for (int j = i + 1; j < array.length; ++j )
{
if (array[j] < array[min])
min = j;
}
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
for (int i = 0; i < array.length - 1; ++i)
{
int min = i;
for (int j = i + 1; j < array.length; ++j )
{
if (array[j] < array[min])
min = j;
}

} // end of sort()


} // end of class SelectionSort
new Thread(new Runnable() {
public void run() {
while (true) {
test();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void test() {
// TODO Auto-generated method stub
}
public Runnable start() {
// TODO Auto-generated method stub
return null;
}
}.start());
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,11 @@

//SortAlgorithm.java
public abstract class SortAlgorithm
{
/**
* Implement sort functionality.
*
* @param data Input integer array to be sorted.
*/
public abstract void sort(int[] data);


/**
* Helper function to swap elements in array.
*/
protected final void swap(int[] array, int i, int j)
{
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
} // end of swap()

} // end of class SortAlgorithm
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//SortDemo1.java
import java.io.*;
import java.util.*;

Expand All @@ -6,69 +7,54 @@ public class SortDemo1
{
protected static final String progName = "SortDemo1";

/** Different modes that program can run. */
/**可以调用的算法*/
public enum Mode {
BUB,
SELECT
BUB,
SELECT
}


/**
* Print usage information.
*
* @param progName Program name.
打印基本信息。
*/
protected static void printUsage(String progName) {
System.err.println("USAGE: " + progName + " [sort method] [input file]");
System.err.println(" sort methods [bubble, quick, merge, cocktail]");
System.err.println("EXAMPLE: " + progName + " quick random.txt");
} // end of printUsage()


System.err.println("USAGE: " + progName + " [sort method] [input file]");
System.err.println(" sort methods [bubble, quick, merge, cocktail]");
System.err.println("EXAMPLE: " + progName + " quick random.txt");
}
/**
* Main method.
*
* @param args Command line arguments.
* 主函数。接受命令行参数-包括算法名字和排序数据集
*/
public static void main(String[] args) {
try {
// not enough arguments
if (args.length != 2) {
printUsage(progName);
System.exit(1);
}

// sorting algorithm to be used
// 获得排序算法名
String algorithmUsed = args[0];
// input file to be sorted
// 获得需要排序的数据集
String fileName = args[1];



File inFile = new File(fileName);
Scanner in = new Scanner(inFile);

// buffer to read in data
// 从文件读入数据
ArrayList<Integer> buffer = new ArrayList<Integer>();

while (in.hasNextInt()) {
buffer.add(new Integer(in.nextInt()));
}

// create array of int
// 使用读入的数据创建列表
int[] array = new int[buffer.size()];
// copy buffer to array
Iterator bit = buffer.iterator();
int j = 0;
while (bit.hasNext()) {
array[j] = (Integer) bit.next();
j++;
}


// buffer memory no longer needed
buffer = null;

// figure out with sorting algorithm we are using
// 选择合适的算法
SortAlgorithm sortAlgor = null;
switch(algorithmUsed) {
case "bubble":
Expand All @@ -85,32 +71,19 @@ public static void main(String[] args) {
}

long startTime = System.nanoTime();

// do the sorting
// 排序
sortAlgor.sort(array);

long endTime = System.nanoTime();



// print out sorted array
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}

// 打印排序后的数组
// for (int i = 0; i < array.length; i++) {
// System.out.println(array[i]);
// }
double timeElapsed = (endTime - startTime) / Math.pow(10, 9);
System.out.println("Time elapsed (secs): " + timeElapsed);
}
catch (Exception e) {
System.err.println(e.getMessage());
printUsage(progName);
}

} // end of main()

} // end of class SortDemo1





}
}