import java.io.*;
import java.util.*;
public class Sort {
public void bubbleSort(ArrayList list) {
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i) > list.get(j)) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public void merge(int[] a, int s, int m, int t) {
int[] tmp = new int[t - s + 1];
int i = s, j = m, k = 0;
while (i < m && j <= t) {
if (a[i] <= a[j]) {
tmp[k] = a[i];
k++;
i++;
} else {
tmp[k] = a[j];
j++;
k++;
}
}
while (i < m) {
tmp[k] = a[i];
i++;
k++;
}
while (j <= t) {
tmp[k] = a[j];
j++;
k++;
}
System.arraycopy(tmp, 0, a, s, tmp.length);
}
public void mergeSort(int[] a, int s, int len) {
int size = a.length;
int mid = size / (len << 1);
int c = size & ((len << 1) - 1);
if (mid == 0)
return;
for (int i = 0; i < mid; ++i) {
s = i * 2 * len;
merge(a, s, s + len, (len << 1) + s - 1);
}
if (c != 0)
merge(a, size - c - 2 * len, size - c, size - 1);
mergeSort(a, 0, 2 * len);
}
public static void main(String[] args) {
File file1 = new File("largeW.txt");
File file2 = new File("largeW_bubble.txt");
File file3 = new File("largeW_merge.txt");
ArrayList list = new ArrayList();
// 读取数据
try {
FileReader in = new FileReader(file1);
BufferedReader bufr = new BufferedReader(in);
String s = null;
int t;
while ((s = bufr.readLine()) != null) {
t = Integer.parseInt(s.trim());
list.add(t);
}
bufr.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
Sort sort = new Sort();
long startsysDate = System.currentTimeMillis();
sort.bubbleSort(list);
long endsysDate = System.currentTimeMillis();
System.out.println(endsysDate - startsysDate);
try {
FileOutputStream fos = new FileOutputStream(file2);
OutputStreamWriter osw = new OutputStreamWriter(fos, "gb2312");
BufferedWriter bw = new BufferedWriter(osw);
for (int i = 0; i < list.size(); i++) {
bw.write(list.get(i).toString());
bw.newLine();
}
bw.close();
osw.close();
fos.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int[] a = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
a[i] = list.get(i);
}
startsysDate = System.currentTimeMillis();
sort.mergeSort(a, 0, 1);
endsysDate = System.currentTimeMillis();
System.out.println(endsysDate - startsysDate);
try {
FileOutputStream fos = new FileOutputStream(file3);
OutputStreamWriter osw = new OutputStreamWriter(fos, "gb2312");
BufferedWriter bw = new BufferedWriter(osw);
String str;
for (int i = 0; i < list.size(); i++) {
str = Integer.toString(a[i]);
bw.write(str);
bw.newLine();
}
bw.close();
osw.close();
fos.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
由于冒泡排序用了35767251毫秒,而归并排序只用了93毫秒、、发现归并排序用了已经排好序了的数组,于是将冒泡排序注释掉
import java.io.*;
import java.util.*;
public class Sort {
public void bubbleSort(ArrayList list) {
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i) > list.get(j)) {
int temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public void merge(int[] a, int s, int m, int t) {
int[] tmp = new int[t - s + 1];
int i = s, j = m, k = 0;
while (i < m && j <= t) {
if (a[i] <= a[j]) {
tmp[k] = a[i];
k++;
i++;
} else {
tmp[k] = a[j];
j++;
k++;
}
}
while (i < m) {
tmp[k] = a[i];
i++;
k++;
}
while (j <= t) {
tmp[k] = a[j];
j++;
k++;
}
System.arraycopy(tmp, 0, a, s, tmp.length);
}
public void mergeSort(int[] a, int s, int len) {
int size = a.length;
int mid = size / (len << 1);
int c = size & ((len << 1) - 1);
if (mid == 0)
return;
for (int i = 0; i < mid; ++i) {
s = i * 2 * len;
merge(a, s, s + len, (len << 1) + s - 1);
}
if (c != 0)
merge(a, size - c - 2 * len, size - c, size - 1);
mergeSort(a, 0, 2 * len);
}
public static void main(String[] args) {
File file1 = new File("largeW.txt");
File file2 = new File("largeW_bubble.txt");
File file3 = new File("largeW_merge.txt");
ArrayList list = new ArrayList();
// 读取数据
try {
FileReader in = new FileReader(file1);
BufferedReader bufr = new BufferedReader(in);
String s = null;
int t;
while ((s = bufr.readLine()) != null) {
t = Integer.parseInt(s.trim());
list.add(t);
}
bufr.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
Sort sort = new Sort();
/*long startsysDate = System.currentTimeMillis();
sort.bubbleSort(list);
long endsysDate = System.currentTimeMillis();
System.out.println(endsysDate - startsysDate);*/
try {
FileOutputStream fos = new FileOutputStream(file2);
OutputStreamWriter osw = new OutputStreamWriter(fos, "gb2312");
BufferedWriter bw = new BufferedWriter(osw);
for (int i = 0; i < list.size(); i++) {
bw.write(list.get(i).toString());
bw.newLine();
}
bw.close();
osw.close();
fos.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int[] a = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
a[i] = list.get(i);
}
long startsysDate = System.currentTimeMillis();
sort.mergeSort(a, 0, 1);
long endsysDate = System.currentTimeMillis();
System.out.println(endsysDate - startsysDate);
try {
FileOutputStream fos = new FileOutputStream(file3);
OutputStreamWriter osw = new OutputStreamWriter(fos, "gb2312");
BufferedWriter bw = new BufferedWriter(osw);
String str;
for (int i = 0; i < list.size(); i++) {
str = Integer.toString(a[i]);
bw.write(str);
bw.newLine();
}
bw.close();
osw.close();
fos.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
发现差别不是很大…………