您的位置:首页 > 编程语言 > Java开发

第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)

2014-03-24 22:07 537 查看
一.冒泡排序(BubbleSort)

基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。


程序代码如下:

package 算法作业;

public class BubbleSort{

public void bubble(int[] a)
{
for(int i=a.length-1;i>0;i--){
for(int j=0;j0){
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)


[b]基本思想:归并算法的中心是归并两个已经有序的数组,并且递归调用归并操作。
[/b]

[b][b]程序代码如下:[/b][/b]


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 + " ");
}
}
}


运行结果如下:







[b][b]总结:这次试验没有按老师要求内容写,求出两种排序结果的运行时间,因为这两[/b][/b]
[b][b] 
         个算法搞了好久才明白一
[/b][/b]点,对于排序时间参考其他同学,知道了归并算法
           的效率更高,本次试验只给出算法原理和代码。
[b][b] 
         至于其中很多不足,希望通过以后的学习慢慢改善,希望老师能谅解。
[/b][/b]


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息