并行实验报告
一、项目背景
项目要求实现快速排序、枚举排序、归并排序三种排序方法的串行和并行算法,并且进行性能比较和优化分析。其中数据集`random.txt`,当中包含30000个乱序数据,数据的范围是[-50000,50000],数据间以空格“ ”分隔。
具体要求:
1. 用Java多线程或者C#多线程模拟并行处理(推荐用Java)。
2. 说明程序执行方式,记录在ReadMe.txt中。
3. 读取乱序数据文件`random.txt`,排序完成后输出排序文件`order\*.txt`。(需提交六份order\*.txt,命名为order1.txt,order2.txt…以此类推)
4. 比较各种算法的运行时间,请将运行时间记录在2*3的表格中。行分别表示串行、并行,列分别表示快速排序、枚举排序、归并排序。
5. 撰写实验报告,包括并行算法的伪代码、运行时间、技术要点(如性能优化方法)等,结合各自的实验设备(如多核处理器)上的实验结果进行优化,并在实验报告中针对实验结果进行分析(考虑到并行算法多线程在单核处理器中的并行开销,有可能性能会比串行算法下降)。
6. 独立完成实验,杜绝抄袭。
二、算法伪代码
2.1 串行快速排序
```java
function quicksort(L, start, end):
if start < end :
p = partition(L, start, end)
quicksort(L, start, p-1)
quicksort(L, p+1, end)
end if
end function
```
````java
function partition(L, start, end):
pivot = start
i = start;
for j = start to end -1:
if L[j] < pivot:
swap(A[i], A[j])
end if
i = i + 1
end for
swap(A[i], A[end])
return i
end function
````
2.2 串行枚举排序
````java
function RankSort(L, start, end):
for i = start to end:
count = 1
for j= start to end:
if L[i] > L[j] || (L[i] == L[j] && i > j):
x = x + 1;
end if
end for
R[i] = L[i]
end for
end function
````
2.3 串行归并排序
```java
function MergeSort(L, start, end):
if start <