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

一.冒泡排序(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 + " ");  
        }  
    }     
}         

运行结果如下:




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



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值