一.冒泡排序(BubbleSort)
基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
程序代码如下:
package 算法作业;
public class BubbleSort{
public void bubble(int[] a)
{
for(int i=a.length-1;i>0;i--){
for(int j=0;j
0){
swap(a,j,j+1);
}
}
}
}
public void swap(int[] a,int x,int y)
{
int temp;
temp=a[x];
a[x]=a[y];
a[y]=temp;
}
public static void main(String[] args){
int[] a = {3,5,9,4,7,8,6,1,2,10,0};
System.out.print("开始排序前的数列为:");
for(int num:a)
{
System.out.print(num + " ");
}
BubbleSort bubble = new BubbleSort();
bubble.bubble(a);
System.out.println();
System.out.print("冒泡排序后的数列为:");
for(int num:a)
{
System.out.print(num + " ");
}
}
}
运行结果如下:
二.归并排序(MergeSort)
基本思想:归并算法的中心是归并两个已经有序的数组,并且递归调用归并操作。
程序代码如下:
package 算法作业;
public class MergeSort{
public void partition(Integer[] arr, int from, int end) {
if (from < end)
{
int mid = (from + end) / 2;
partition(arr, from, mid);
partition(arr, mid + 1, end);
merge(arr, from, end, mid);
}
}
public void merge(Integer[] arr, int from, int end, int mid) {
Integer[] tmpArr = new Integer[11];
int tmpArrIndex = 0;
int part1ArrIndex = from;
int part2ArrIndex = mid + 1;
while ((part1ArrIndex <= mid) && (part2ArrIndex <= end))
{
if (arr[part1ArrIndex] - arr[part2ArrIndex] < 0)
{
tmpArr[tmpArrIndex++] = arr[part1ArrIndex++];
} else
{
tmpArr[tmpArrIndex++] = arr[part2ArrIndex++];
}
}
while (part1ArrIndex <= mid)
{
tmpArr[tmpArrIndex++] = arr[part1ArrIndex++];
}
while (part2ArrIndex <= end)
{
tmpArr[tmpArrIndex++] = arr[part2ArrIndex++];
}
System.arraycopy(tmpArr, 0, arr, from, end - from + 1);
}
public static void main(String[] args) {
Integer[] intgArr = {5,9,1,4,2,6,3,8,0,7,10};
System.out.print("开始排序前的数列为:");
for(Integer a:intgArr)
{
System.out.print(a + " ");
}
MergeSort insertSort = new MergeSort();
insertSort.partition(intgArr,0,intgArr.length-1);
System.out.println();
System.out.print("归并排序后的数列为:");
for(Integer a:intgArr)
{
System.out.print(a + " ");
}
}
}
运行结果如下:
总结:这次试验没有按老师要求内容写,求出两种排序结果的运行时间,因为这两
个算法搞了好久才明白一
点,对于排序时间参考其他同学,知道了归并算法
的效率更高,本次试验只给出算法原理和代码。
至于其中很多不足,希望通过以后的学习慢慢改善,希望老师能谅解。